https://www.acmicpc.net/problem/1463
DP 문제를 처음 풀어봐서 어떤 방식으로 푸는지 찾아봤다.
사용하기 위한 조건
DP 알고리즘을 적용할 수 있게 점화식을 도출하는 것이 핵심
sol)
#include <iostream>
#include <algorithm>
using namespace std;
int dp[1000000];
int main() {
int N;
cin >> N;
dp[0] = 0;
dp[1] = 0;
dp[2] = 1;
dp[3] = 1;
for (int i = 4; i <= N; i++) {
dp[i] = dp[i - 1] + 1;
if (i % 2 == 0)
dp[i] = min(dp[i], dp[i / 2] + 1);
if (i % 3 == 0)
dp[i] = min(dp[i], dp[i / 3] + 1);
}
cout << dp[N];
return 0;
}