Algorithm/Baekjoon
[DP] 백준 #24416 알고리즘 수업 - 피보나치 수 1 - Python
jyjyjy25
2024. 4. 3. 23:58
🗂️ 문제
링크: https://www.acmicpc.net/problem/24416
24416번: 알고리즘 수업 - 피보나치 수 1
오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 오늘은 n의 피보나치 수를 재귀호출과 동적 프로그래밍
www.acmicpc.net
💡 접근법
- DP로 풀 수 있는지 먼저 확인한다.
- 부분 문제가 반복적으로 나타나야 한다.
- 부분 문제의 최적 결과를 사용하여 전체 문제의 최적 결과를 낼 수 있다.
- DP 테이블을 초기화한다.
- 조건에 맞는 점화식을 구한다.
😎 내 코드
import sys
def fib_recur(n):
global recur_cnt
if n == 1 or n == 2:
recur_cnt += 1
return 1
else:
return fib_recur(n-1) + fib_recur(n-2)
def fib_dp(n):
global dp_cnt
f = [0] * (n+1)
f[1] = f[2] = 1
for i in range(3, n+1):
dp_cnt += 1
f[i] = f[i-1] + f[i-2]
return f[n]
N = int(sys.stdin.readline())
recur_cnt = dp_cnt = 0
fib_recur(N)
fib_dp(N)
print(recur_cnt, dp_cnt)