
프로그래머스 숫자변환하기
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를 넘어서야 하는 경우 발생 가능하향식 접근 방식이 상태 공간이 상대적으로 작아 효율적이며, 상향식 접근은 상태 공간이 넓어 비효율적일 수 있다.