Thief of Wealth

www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

핵심 아이디어

bfs를 사용하는 문제이다.

기존 NxN 보드에서 사용하는 것과 달린 일직선에서 적용한다는 점만 다르며, +1, -1, *2 되는 지점을 큐에 넣어서 탐색하면된다.

 

<javascript />
"use strict"; const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const dp = Array.from({ length: 100001 }, () => Infinity); const visited = Array.from({ length: 100001 }, () => 0); const solution = function (input) { const [n, k] = input .shift() .split(" ") .map((e) => parseInt(e)); const q = [n]; dp[n] = 0; visited[n] = 1; while(q.length > 0){ const curr = q.shift(); if(curr+1 < 1000001){ if(dp[curr+1] > dp[curr]+1 && !visited[curr+1]){ dp[curr+1] = dp[curr]+1; q.push(curr+1); visited[curr+1] = 1; } } if(curr-1 >= 0){ if(dp[curr-1] > dp[curr]+1 && !visited[curr-1]){ dp[curr-1] = dp[curr]+1; q.push(curr-1); visited[curr-1] = 1; } } if(curr*2 < 1000001 && !visited[curr*2]){ if(dp[curr*2] > dp[curr]+1){ dp[curr*2] = dp[curr]+1; q.push(curr*2); visited[curr*2] = 1; } } // console.log(q); } console.log(dp[k]); }; const input = []; rl.on("line", function (line) { input.push(line); }).on("close", function () { solution(input); process.exit(); });
한번 누르면 2시간동안 보이지 않아요 ㅎㅎ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
원치 않을 경우 를 눌러주세요