처음에 의사코드를 그냥 그대로 옮겨서 적었더니 시간초과가 났다. 어쩐지 문제가 너무 쉽더라니... fib(n)에서 재귀를 너무 많이 호출하다보니 시간초과가 난 것 같아서 이 코드 대신 fib(1)과 fib(2)를 호출하는 경우를 구해서 반환하는 것으로 코드를 다시 짰다.
import sys
input = sys.stdin.readline
N = int(input())
cnt1 = 0
cnt2 = 0
# 피보나치 수 재귀 호출
def fib(n):
global cnt1
if n==1 or n==2:
cnt1 += 1
return 1
else:
return fib(n-1) + fib(n-2)
# 피보나치 수 동적 프로그래밍
def fibonacci(n):
global cnt2
f = [0, 1, 1]
for i in range(3, n+1):
cnt2 += 1
f.append(f[i-1] + f[i-2])
return f[n]
fib(N)
fibonacci(N)
print(cnt1, cnt2)
import sys
input = sys.stdin.readline
N = int(input())
cnt2 = 0
# 피보나치 수 동적 프로그래밍
def fibonacci(n):
global cnt2
f2 = [0, 1, 1]
for i in range(3, n+1):
cnt2 += 1
f2.append(f2[i-1] + f2[i-2])
return f2[n]
print(fibonacci(N), cnt2)
