프로그래머스 숫자변환하기
https://school.programmers.co.kr/learn/courses/30/lessons/154538
x
를 y
로 변환하기 위해 필요한 최소 연산 횟수’ 부분에서 BFS으로 접근 판단function solution(x: number, y: number, n: number) {
const queue: [number, number][] = [];
const visited = new Set();
queue.push([x, 0]);
visited.add(x);
while (queue.length > 0) {
const [x, count] = queue.shift()!;
if (x === y) return count;
const nextNumbers = [x + n, x * 2, x * 3];
for (const num of nextNumbers) {
if (visited.has(num) || num > y) continue;
queue.push([num, count + 1]);
visited.add(num);
}
}
return -1;
}
function solution(x: number, y: number, n: number) {
const queue: [number, number][] = [];
const visited = new Set();
queue.push([y, 0]);
visited.add(y);
while (queue.length > 0) {
const [current, count] = queue.shift()!;
if (current === x) return count;
const nextNumbers = [];
if (current % 2 === 0) nextNumbers.push(current / 2);
if (current % 3 === 0) nextNumbers.push(current / 3);
nextNumbers.push(current - n);
for (const num of nextNumbers) {
if (visited.has(num) || num < x) continue;
queue.push([num, count + 1]);
visited.add(num);
}
}
return -1;
}
y
에서 시작하여 숫자를 줄여 나가므로 탐색할 범위가 작고 불필요한 상태를 빠르게 배제x
에서 목표 숫자 y
로 가는 경로를 탐색하기 때문에 상태 공간이 넓어지고, 목표 숫자 y
를 넘어서야 하는 경우 발생 가능하향식 접근 방식이 상태 공간이 상대적으로 작아 효율적이며, 상향식 접근은 상태 공간이 넓어 비효율적일 수 있다.