import java.util.*;
class Solution {
public int solution(int x, int y, int n) {
// 방문한 상태를 저장하는 배열, x가 1,000,000까지 가능하므로 그에 맞게 배열 크기 설정
boolean[] visited = new boolean[1000001];
// BFS를 위한 큐, 배열을 사용하여 현재 값과 연산 횟수를 저장
Queue<int[]> queue = new LinkedList<>();
// 시작점 추가
queue.add(new int[]{x, 0});
while (!queue.isEmpty()) {
int[] current = queue.poll();
int currentValue = current[0];
int count = current[1];
// 목표값에 도달한 경우 현재까지의 연산 횟수 반환
if (currentValue == y) {
return count;
}
// 방문한 적이 없는 상태만 탐색
if (currentValue <= y && !visited[currentValue]) {
visited[currentValue] = true;
// 가능한 연산 3가지를 큐에 추가
queue.add(new int[]{currentValue + n, count + 1});
if (currentValue * 2 <= y) {
queue.add(new int[]{currentValue * 2, count + 1});
}
if (currentValue * 3 <= y) {
queue.add(new int[]{currentValue * 3, count + 1});
}
}
}
// y로 만들 수 없는 경우
return -1;
}
public static void main(String[] args) {
Solution sol = new Solution();
int x = 10;
int y = 40;
int n = 5;
int result = sol.solution(x,y,n);
System.out.println(result);
}
}