1. Dynamic Programming 복잡한 문제를 여러개의 문제로 나누어 푸는 알고리즘 입니다. 조건 부분 문제 반복과 최적 부분 구조를 가지고 있는 문제에 적용할 수 있습니다. 중복 부분문제 구조 (Overlapping subproblems) 문제를 작은 부분 문제들로 나누었을 때, 이러한 부분 문제들로 구성된 현상입니다. Memoization: 작은 문제들의 해를 저장 및 재사용함으로써 중복계산을 방지할 수 있습니다. 최적 부분문제 구조 (Optimal substructure) 전체 문제의 해가 부분 문제의 해로부터 구성될 수 있는 성질을 의미합니다. 부분 문제와 전체 문제간에 의존성이 존재합니다. 이러한 의존성을 점화식으로 도출하여 전체 해를 작은 문제의 해의 조합으로 표현할 수 있습니다. 작..