728x90
반응형
DP 사용조건
- 큰 문제를 작은 문제로 나눌 수 있음
- 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일함
탑다운(Top-Down) 방식
- 작은 문제를 재귀적으로 해결
d = [0] * 100 # 한 번 계산된 결과를 memoization하기 위한 list 초기화
def fibo(x): # 피보나치 함수를 재귀함수로 구현 (탑다운)
if x == 1 or x == 2:
return 1
if d[x] != 0: # 이미 계산한 적 있는 문제라면 그대로 반환
return d[x]
d[x] = fibo(x - 1) + fibo(x - 2) # 아직 계산하지 않은 문제라면 점화식에 따라 결과 반환
return d[x]
print(fibo(99))
보텀업(Bottom-Up) 방식
- 먼저 계산했던 값 이용
d = [0] * 100 # 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
d[1] = 1 # 첫번째 피보나치 수
d[2] = 1 # 두번째 피보나치 수
n = 99
for i in range(3, n+1): # 피보나치 함수를 반복문으로 구현 (보텀업)
d[i] = d[i-1] + d[i-2]
print(d[n])
파이썬 재귀 제한 완화
import sys
sys.setrecursionlimit(10**6)
💡 Tip
가능하다면 재귀 함수를 이용하는 탑다운 방식보다는 보텀업 방식으로 구현할 것
728x90
'자료구조 및 알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
코딩 테스트 완전 정복 ・ 배열 (0) | 2024.06.14 |
---|---|
코딩 테스트 사전 지식 ・lambda 뿌시기 (1) | 2024.06.13 |
정렬 ・ 이진 탐색 (0) | 2024.06.12 |
주요 라이브러리 ・DFS ・BFS (0) | 2024.06.12 |
코딩테스트 준비 3편 (1) | 2024.06.10 |