STUDY/Algorithm

[백준] 1003 피보나치 함수

sinawi95 2021. 1. 28. 17:46
728x90
T = int(input())
fibo_memoization = [0, 1,]

for tc in range(T):
    N = int(input())
    if N == 0:
        print(1, 0)
        continue
    try:
        print(fibo_memoization[N-1], fibo_memoization[N])
    except:
        for i in range(2,N+1):
            fibo_memoization.append(fibo_memoization[-1]+fibo_memoization[-2])
        print(fibo_memoization[N-1], fibo_memoization[N])

0일 때, 0: 1번 호출 1: 0번 호출 <= fibo(0) = 0

1일 때, 0: 0번 호출 1: 1번 호출 <= fibo(1) =1

2일 때, 0: 1번 호출 1: 1번 호출 <= fibo(2) = fibo(1)+ fibo(0) 

3일 때, 0: 1번 호출 1: 2번 호출 <= fibo(3) = fibo(2)+fibo(1)

4일 때, 0: 2번 호출 1: 3번 호출 <= fibo(4) = fibo(3)+fibo(2)

5일 때, 0: 3번 호출 1: 5번 호출 <= fibo(5) = fibo(4)+fibo(3)

0을 제외하고 1부터는 0을 호출하는것과 1을 호출하는 것 둘다 피보나치 수열을 따른다. (각각 N-1번째와 N번째 )

그래서 N번째의 피보나치 수열을 메모이제이션으로 구현하면 쉽게 나온다.


try. except를 사용하지 않는 방법을 찾아봐야겠다.