function solution(x, y, n) {
// dp 배열을 y+1 크기로 만들고 모든 값을 Infinity로 초기화
const dp = new Array(y + 1).fill(Infinity);
// 시작점 x의 값을 0으로 설정
dp[x] = 0;
// x부터 y까지 반복
for (let i = x; i <= y; i++) {
// i + n이 y보다 작거나 같으면 dp[i + n] 값을 변경
if (i + n <= y) {
dp[i + n] = Math.min(dp[i + n], dp[i] + 1);
}
// i * 2가 y보다 작거나 같으면 dp[i * 2] 값을 변경
if (i * 2 <= y) {
dp[i * 2] = Math.min(dp[i * 2], dp[i] + 1);
}
// i * 3이 y보다 작거나 같으면 dp[i * 3] 값을 변경
if (i * 3 <= y) {
dp[i * 3] = Math.min(dp[i * 3], dp[i] + 1);
}
}
// dp[y]가 Infinity가 아니면 dp[y]를 반환하고, 그렇지 않으면 -1을 반환
return dp[y] !== Infinity ? dp[y] : -1;
}