동적 프로그래밍(동적 계획법, Dynamic Programming)은 하나의 문제를 풀기 위해서 해당 문제를 여러 개의 Subproblem으로 나누어 푸는 방식이고, Subproblem은 반복되며 답은 항상 같은 특성을 이용하여 Memoization을 통해 최종적으로 문제를 해결하는 것을 말한다. 설명 간략하게 정리된 위의 문장을 쪼개서 설명하면 다음과 같다. 1. 하나의 문제를 풀기 위해서 해당 문제를 여러 개의 Subproblem으로 나누어 푸는 방식이다. 하나의 문제를 풀기 위해서는 그보다 더 작은 Subproblem으로, 그리고 해당 subproblem에서 그보다 더 작은 Subproblem을 더이상 나눌 수 없을 때까지 나누어 작은 Subproblem의 결과 값으로 부터 최종 답을 구할 수 있는..