주어진 숫자들을 한정된 연산으로 조작하여 일치시킬 수 있는지 판단하는 문제입니다. y가 백만보다 작다는 조건이 있기 때문에 편하게 앞에서부터 dp로 채워나갔습니다.
class Solution {
public int solution(int x, int y, int n) {
int answer = 0;
int[] dp = new int[y + 1];
for (int i = 0; i < x; i++) {
dp[i] = 1000000;
}
dp[x] = 0;
for (int i = x + 1; i < y + 1; i++) {
if (i >= n) {
dp[i] = 1 + dp[i - n];
} else {
dp[i] = 1000000;
}
if (i % 2 == 0) {
dp[i] = Math.min(dp[i], 1 + dp[i / 2]);
}
if (i % 3 == 0) {
dp[i] = Math.min(dp[i], 1 + dp[i / 3]);
}
}
answer = dp[y];
if (answer >= 1000000) {
return -1;
}
return answer;
}
}