https://www.acmicpc.net/problem/1003
def fibonacci(n,ans):
if n == 0:
ans[0]+=1
return 0
elif n==1:
ans[1]+=1
return 1
else:
return fibonacci(n-1,ans)+fibonacci(n-2,ans)
t=int(input())
for i in range(t):
n = int(input())
ans = [0]*2
fibonacci(n,ans)
print(str(ans[0])+" "+ str(ans[1]))
시간초과로 실패..
문제에서 주는 곧이곧대로 재귀함수로 풀어서 그런가보다
시간 복잡도는 각 테스트 케이스에 대해 O(2^N).
자신을 두 번 호출하기때문! 피보나치(n-1, ans) + 피보나치(n-2, ans) 이렇게.
def fibonacci(n):
if n == 0:
return (1,0)
if n == 1:
return (0,1) # 리스트 안에 튜플로 0,1 카운트
li = [(0,0)]*(n+1)
li[0] = (1,0)
li[1] = (0,1)
for i in range(2,n+1):
zero_cnt =li[i-1][0]+li[i-2][0]
one_cnt = li[i-1][1]+li[i-2][1]
li[i] = (zero_cnt,one_cnt)
return li[n]
t=int(input())
for i in range(t):
n = int(input())
zero_cnt,one_cnt = fibonacci(n)
print(str(zero_cnt)+" "+ str(one_cnt))
참고) 재귀 함수를 동적 프로그래밍으로 바꾸는 몇 가지 팁