문제 요약
//입력 1
2
//입력 2
10
출력
//출력 1
1
//출력
3
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim();
const count = parseInt(input);
const dp = Array.from({ length: count + 1 }, () => 0);
for (let i = 2; i < dp.length; i++) {
dp[i] = dp[i - 1] + 1;
if (i % 3 === 0) {
dp[i] = Math.min(dp[i], dp[i / 3] + 1);
}
if (i % 2 == 0) {
dp[i] = Math.min(dp[i], dp[i / 2] + 1);
}
}
console.log(dp[count]);
dp[x] = dp[x-1] + 1;
이를 점화식으로 나타내면 아래와 같다. 경우의 수를 카운트하는 식인 것이다.
0,1 나누어도 카운트가 0이니 제외하므로 i는 2부터 시작된다.
다음 Math.min()을 이용해 최솟값을 비교한다.