[알고리즘] 동적 계획법 (Dynamic Programming) 다이나믹 프로그래밍은 하나의 큰 문제를 여러개의 작은 문제들로 나눠서 해결하는 방식입니다. 그렇기 때문에 다이나믹 프로그래밍을 이용하여 문제를 해결하려면 2 가지 조건을 만족해야 합니다. - 부분 반복 문제 (Overlapping Subproblem) 다이나믹 프로그래밍은 전체 문제를 여러개의 작은 문제들로 나눈 다음 그 결과값들을 이용해 전체의 답을 도출해냅니다. 그렇기 때문에 동일한 작은 문제들이 반복하여 나타나는 경우에 사용 가능합니다. - 최적 부분 구조 (Optimal Substructure) 최적 부분 구조는 전체 문제의 최적해가 부분 문제들의 최적해로 이루어진 경우를 말합니다. 그렇기 때문에 특정 문제의 정답은 문제의 크기에 상..