동적 계획법 (Dynamic Programming) 설명:
동적 계획법 (Dynamic Programming, DP)은 복잡한 문제를 작은 부분 문제(sub-problems)로 분해하고, 이 작은 문제들의 결과를 저장하며, 이를 활용하여 원래 문제의 결과를 구하는 방법론입니다.
DP는 크게 두 가지 접근 방식으로 나뉩니다:
1. 하향식 (Top-down): 재귀를 사용하여 큰 문제를 작은 문제로 분해하고, 메모이제이션(memoization)을 사용하여 중복 계산을 방지합니다.
2. 상향식 (Bottom-up): 작은 문제부터 시작하여 순차적으로 결과를 빌드업하는 방식. 보통 테이블(tabulation)을 사용하여 값을 저장합니다.
DP의 특징:
동적 계획법의 대표적인 예제:
예제와 솔루션 (피보나치 수열):
문제:
n번째 피보나치 수를 구하라.
상향식 접근 (Bottom-up):
function fibonacci(n) {
if (n <= 1) return n;
let fib = [0, 1];
for (let i = 2; i <= n; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib[n];
}
console.log(fibonacci(9)); // 출력: 34
이 예제에서는 피보나치 수열의 n번째 값을 상향식 방법을 사용하여 구합니다. 작은 문제부터 결과를 저장하며 큰 문제의 해결책을 도출합니다.
동적 계획법은 중복 계산을 피함으로써 효율적인 해결책을 제공합니다. 문제를 잘 분석하고 동적 계획법의 적용 여부를 판단하는 것이 중요합니다.