어떤 문제의 해답에 그보다 작은 문제의 해답이 포함되어 있다면 이를 최적 부분 구조
를 가졌다고 하는데, 이러한 성질을 가지는 문제들을 dp로 풀 수 있다.
🤷 정자역에서 서울시립대까지 가는 법?
👦 정자역에서 회기역까지 가서, 10분 걸으면 돼!
🤷 그럼 회기역까지 가는 법을 알면 되겠네. 회기역까지 어떻게 가는데?
👦 정자역에서 왕십리역까지 가서, 경의중앙선 타면 돼!
🤷 그럼 왕십리역까지 가는 법을 알면 되겠네. 왕십리역까지 어떻게 가는데? ...
DP[1]
, DP[2]
, ..., DP[k]
순서대로 이전 인덱스의 DP값을 이용해 다음 인덱스의 DP값을 채움)을 쌓아가서 최종적으로 DP[k]
를 구하면 된다dp[n][p] = dp[n][p+1] + dp[n-1][p]