- 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법
핵심 이론
동적 계획법의 원리와 구현 방식
- 큰 문제를 작은 문제로 나눌 수 있어야 한다.
- 작은 문제들이 반복돼 나타나고 사용되며 이 작은 문제들의 결과값은 항상 같아야 한다.
- 모든 작은 문제들은 한 번만 계산해 DP 테이블에 저장하며 추후 재사용할 때는 이 DP 테이블을 이용한다. 이를 메모이제이션(Memoization) 기법이라고 한다.
- 동적 계획법은 톱-다운 방식(top-down)과 바텀-업(bottom-up) 방식으로 구현할 수 있다.
피보나치 수열 공식
D[N] = D[N - 1] + D[N - 2]
// N번째 수열 = N - 1 번째 수열 + N - 2 번째 수열
1. 동적 계획법으로 풀 수 있는지 확인하기
- 6번째 피보나치 수열은 5번째 피보나치 수열과 4번째 피보나치 수열의 합 → 작은 문제로 나눌 수 있고, 수열의 값은 항상 같기 때문에 동적 계획법으로 풀 수 있음
2. 점화식 세우기
- 점화식을 세울 때는 논리적으로 전체 문제를 나누고, 전체 문제와 부분 문제 같의 인과 관계를 파악하는 훈련이 필요
- 피보나치 수열의 점화식은
D[i] = D[i - 1] + D[i - 2]
3. 메모이제이션 원리 이해하기