🗂️ 문제
링크: https://www.acmicpc.net/problem/24416
💡 접근법
- 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)
✅ 정답 확인
'Algorithm > Baekjoon' 카테고리의 다른 글
[DP] 백준 #9095 1, 2, 3 더하기 - Python (0) | 2024.04.09 |
---|---|
[DP] 백준 #2579 계단오르기 - Python (0) | 2024.04.06 |
[완전탐색] 백준 #2529 부등호 - Python (1) | 2024.03.23 |
[스택] 백준 #3986 좋은 단어 - Python (0) | 2024.03.18 |
[정렬] 백준 #1141 접두사 - Python (0) | 2024.03.16 |