정의

**Dynamic Programming(동적 프로그래밍)**은 문제를 작은 하위 문제로 나누어 부분 문제의 결과를 재사용함으로써 효율적으로 문제를 해결하는 기법입니다. 주로 최적화 문제결정 문제를 푸는 데 사용됨

특징

  1. Overlapping Subproblems (부분 문제의 중복)
  1. Optimal Substructure (최적 부분 구조)
  1. Memoization 또는 Tabulation

동작 원리

  1. 문제 정의
  2. 점화식 작성
  3. 초기값 설정
  4. 결과 계산

구현 방식

  1. Top-Down 방식 (재귀 + 메모이제이션)
  2. Bottom-Up 방식 (반복문)

유형

  1. 최적 경로 문제 : 최소 비용 경로, 최단 경로 (다익스트라, 플로이드 워셜)
  2. 배낭 문제 : 정수 배낭 문제, 0/1 배낭 문제