Algorithem/프로그래머스 PS with code

[python3] 멀리 뛰기 lv.2

jamong5 2023. 1. 26. 16:22

시도 1) nCm 으로 해결해보려,, 했는데

def nCm(n,m) :
    if m == 0 : return 1
    else :
        r = 1
        for i in range(n-m+1,n+1) :
            r*=i
        t = 1
        for i in range(1,m+1) :
            t*=i
        return r//t

def solution(n):
    one = n
    two = 0
    summ = 0
    while one >= 0 :
        summ += nCm(one+two, min(one,two))
        one-=2
        two+=1
    return summ%1234567 # 나머지를 구하는 문제. 문제 잘읽자

 

 

 

풀이) (점화식) 피보나치

1 -> (1) : 1

2 -> (1,1), (2) : 2

3 -> (1,1,1), (1,2), (2,1) : 3

4 -> (1,1,1,1), (1,1,2), (1,2,1), (2,1,1), (2,2) : 5

5 -> (1,1,1,1,1), (1,1,1,2), (1,1,2,1), (1,2,1,1), (2,1,1,1), (1,2,2), (2,1,2), (2,2,1) : 8

결론 : 전전꺼 맨 뒤에 2를 붙이거나, 전꺼 맨 뒤에 1을 붙이거나 둘 중 한가지로 표현할 수 있다.

def solution(n):
    a=0
    b=1
    for i in range(n) :
        a,b = b,a+b
    return b%1234567