Dynamic Programming(다이나믹 프로그래밍) 복잡한 문제를 효율적으로 해결하기 위한 알고리즘 설계 기법이다. 다이나믹 프로그래밍은 주어진 문제를 여러 하위 문제로 나누어 해결한 다음에 이를 결합하여 전체 문제의 최적해를 구하는 방식으로 작동한다. 중복되는 하위 문제들을 반복적으로 해결함으로써 중복 계산을 피하고 효율적인 결과를 얻을 수 있다. 다이나믹 프로그래밍의 핵심 아이디어는 "작은 문제의 최적해는 큰 문제의 최적해를 포함한다"라는 것이다. 다시 말해서, 문제를 작은 부분 문제로 나누고, 각 부분 문제의 최적해를 계산하여 이를 저장하고 재사용하여 전체 문제의 최적해를 구하는 방식이다. 다이나믹 프로그래밍의 요소 1. Optimal sub-structure : 큰 문제를 작은 문제로 쪼갠다..