[BAKJOON] #1932. 정수 삼각형 (다이나믹 프로그래밍)
BAKJOON #1932. 정수 삼각형 문제를 파헤쳐보자 :)
다이나믹 프로그래밍(Dynamic Programming, DP) 알고리즘에 대해 알아보자 :)
순서 | 절차 |
1 | 문제를 작은 부분 문제로 나눌 수 있는지 확인 (Optimal Substructure) |
2 | 동일한 부분 문제가 반복되는지 확인 (Overlapping Subproblems) |
3 | 부분 문제의 결과를 저장할 구조(배열/테이블/딕셔너리 등)를 정의 |
4 | 작은 문제부터 차례대로 해결 → 저장 → 재활용 (Bottom-up) 또는 필요할 때만 계산 후 저장 (Top-down, Memoization) |
5 | 전체 문제의 해를 도출 |
def fib_memo(n, memo={}): if n in memo: return memo[n] if n <= 1: return n memo[n] = fib_memo(n-1, memo) + fib_memo(n-2, memo) return memo[n]
def fib_dp(n): dp = [0, 1] + [0] * (n-1) for i in range(2, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n]