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를 사용하지 않는 방법을 찾아봐야겠다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1316. 그룹 단어 체커 (0) | 2021.01.29 |
---|---|
[프로그래머스] LEVEL2 짝지어 제거하기, python3, 2017 팁스타운 (0) | 2021.01.28 |
[백준] 10250 ACM 호텔 (0) | 2021.01.28 |
[프로그래머스] LEVEL2 스킬트리, python3, Summer/Winter Coding(~2018) (2) | 2021.01.28 |
4835. [파이썬 S/W 문제해결 기본] 1일차 - 구간합 (0) | 2021.01.11 |