From 4911e1795667401f1cafa810088f9838583a4925 Mon Sep 17 00:00:00 2001 From: Dongmin <122417731+cdm1263@users.noreply.github.com> Date: Sun, 21 Jan 2024 18:57:16 +0900 Subject: [PATCH] =?UTF-8?q?[PGM]=20=EC=88=AB=EC=9E=90=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20/=20Level=202=20/=2045=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\355\231\230\355\225\230\352\270\260.js" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "dongmin/\354\210\253\354\236\220 \353\263\200\355\231\230\355\225\230\352\270\260.js" diff --git "a/dongmin/\354\210\253\354\236\220 \353\263\200\355\231\230\355\225\230\352\270\260.js" "b/dongmin/\354\210\253\354\236\220 \353\263\200\355\231\230\355\225\230\352\270\260.js" new file mode 100644 index 0000000..4cae712 --- /dev/null +++ "b/dongmin/\354\210\253\354\236\220 \353\263\200\355\231\230\355\225\230\352\270\260.js" @@ -0,0 +1,35 @@ +function solution(x, y, n) { + const visited = new Set(); + const queue = [[y, 0]]; + + // queue에서 순서대로 값을 꺼내며 진행 + while (queue.length > 0) { + const [current, count] = queue.shift(); + + // 현재의 값이 x와 같아지면 count를 return + if (current === x) { + return count; + } + + // current가 visited에 없는 값이면 visited에 추가 + // queue에 각각 current - n, current / 2, current / 3 을 한 값을 담음 + // 단, x보다 값이 작아지거나 나누어 떨어지지 않는 경우 제외 + if (current > x && !visited.has(current)) { + visited.add(current); + + if (current - n >= x) { + queue.push([current - n, count + 1]); + } + if (current % 2 === 0) { + queue.push([current / 2, count + 1]); + } + if (current % 3 === 0) { + queue.push([current / 3, count + 1]); + } + } + + // if문으로 걸러지지 못한 경우 shift()만 진행하고 다음 단계로 진행 + continue; + } + return -1; +}