자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.
x에 n을 더합니다
x에 2를 곱합니다.
x에 3을 곱합니다.
자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.
x : 10
y : 40
n : 5
2
1 ≤ x ≤ y ≤ 1,000,000
1 ≤ n < y
function solution(x, y, n) {
var answer = 0;
if(x===y) return 0;
else if(x+n>y && x*2>y && x*3>y) return -1;
else {
let queue = [[x, 0]];
let visited = new Set();
let index = 0;
while(index < queue.length) {
let [current, count] = queue[index++];
if(current===y) return count;
if(!visited.has(current)) {
visited.add(current);
if(current+n<=y) queue.push([current+n, count+1]);
if(current*2<=y) queue.push([current*2, count+1]);
if(current*3<=y) queue.push([current*3, count+1]);
}
}
}
return -1;
}
DFS로 접근했다가 시간초과... BFS는 구현하기 쉽긴한데 DFS에 비해 뭔가 구현할 때마다 어떻게 해야할지 고민이 되는 것 같다... DFS처럼 반복학습을 안 해서 그런가.. 이 문제는 6번 케이스가 계속 틀렸는데 x와 y가 같은 건 0으로 해주어야 하는 걸 놓쳤다.......... 흠........