다이나믹 프로그래밍(Dynamic Programming)은 복잡한 문제를 해결하기 위한 컴퓨터 프로그래밍 기법 중 하나다. 이 기법은 같은 문제가 반복적으로 해결되는 경우에 사용되며, 이전에 계산한 결과를 저장하고 재사용함으로써 중복 계산을 피하고 실행 속도를 높이는 효과가 있다. 아래는 다이나믹 프로그래밍의 개념, 접근 방법, 구현 방법, 활용 사례 등에 대해 정리한 내용이다.

개념

접근 및 구현 방식

다이나믹 프로그래밍은 보통 Top-down 방식 또는 Bottom-up 방식으로 접근한다.

시간복잡도

O(부분 문제의 개수 * 각 문제를 푸는 시간)

일반적으로 다이나믹 프로그래밍은 중복 계산을 줄이기 위해 이전 결과를 저장하고 재사용하는 memoization 기법을 사용하기에,

시간 복잡도는 하위 문제의 수각 하위 문제를 해결하는 데 필요한 시간에 따라 결정된다.

하지만 (경험상)백준의 전형적인 DP 문제들은 봤을 때, 애초에 완전탐색(Brute Force)을 시도할 생각조차 못하는 문제들이 많기 때문에 시간복잡도를 줄이기 위해 DP를 사용할지 고민할 필요는 없음

오히려 DP로 시간초과가 발생하여 Greedy로 풀어야되는 지 고민되는 문제는 많을 것 같음