overlapping subproblem
큰 문제와 작은 문제를 같은 방법으로 풀 수 있으며 (e.g. N의 값이 큰 경우와 작은 경우)
큰 문제를 작은 문제들로 쪼갤 수 있는 경우
optimal substructure
큰 문제의 정답을 쪼개진 작은 문제들의 정답(optimal solution)으로 부터 구해지는 경우
위의 두 조건들을 잘 보고 판단하여 문제들을 해결하려고 한다면 DP문제들은 비교적 쉽게 해결되는 경우가 많음
memoization을 잘 활용하고 (반복해서 중복되는 작은 문제들을 매 번 해결하지 않기 위해) TOP-DOWN(재귀)으로 풀 것인지 BOTTOM-UP(반복문)으로 풀 것인지 잘 판단해야 함
TOP-DOWN : 문제를 큰 문제에서 해당하는 작은 문제들로 계속 분할 후 해결
BOTTOM-UP : 문제들을 작은 문제부터 쭉 해결하고 풀고자하는 큰 문제에 도달했을 때 멈추고 해당 solution을 반환