From 1eaf918483ea0d0b0cf8bd3b91fb2a73b4abdbc2 Mon Sep 17 00:00:00 2001 From: luckylooky2 Date: Thu, 5 Oct 2023 09:29:09 +0900 Subject: [PATCH] =?UTF-8?q?refactor=20:=20bfs(=EB=AF=B8=EB=A1=9C=20?= =?UTF-8?q?=ED=83=90=EC=83=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- baekjoon/2178.js | 56 +++++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/baekjoon/2178.js b/baekjoon/2178.js index 03df523..bf37c84 100644 --- a/baekjoon/2178.js +++ b/baekjoon/2178.js @@ -10,50 +10,42 @@ const [n, m] = input .split(" ") .map((v) => parseInt(v, 10)); const map = input.map((v) => v.split("").map((v) => parseInt(v, 10))); -const visited = map.map((v) => v.map((v) => false)); +const visited = map.map((v) => v.map((v) => 0)); const dir = [ [-1, 0], [0, 1], [1, 0], [0, -1], ]; -const q1 = new Queue(); -const q2 = new Queue(); -let isFirst = true; +const q = new Queue(); let i = 0, j = 0; -let cnt = 1; let flag = false; -q1.push([i, j]); -visited[i][j] = true; +q.push([i, j]); +visited[i][j] = 1; -while (!(q1.size === 0 && q2.size === 0)) { - while (isFirst ? q1.size !== 0 : q2.size !== 0) { - const top = isFirst ? q1.head.value : q2.head.value; - isFirst ? q1.pop() : q2.pop(); - for (let i = 0; i < 4; i++) { - const next = [top[0] + dir[i][0], top[1] + dir[i][1]]; - if ( - next[0] < 0 || - next[0] >= n || - next[1] < 0 || - next[1] >= m || - map[next[0]][next[1]] === 0 || - visited[next[0]][next[1]] === true - ) - continue; - isFirst ? q2.push(next) : q1.push(next); - visited[next[0]][next[1]] = true; - if (next[0] === n - 1 && next[1] === m - 1) { - flag = true; - break; - } +while (q.size !== 0) { + const top = q.head.value; + q.pop(); + for (let i = 0; i < 4; i++) { + const next = [top[0] + dir[i][0], top[1] + dir[i][1]]; + if ( + next[0] < 0 || + next[0] >= n || + next[1] < 0 || + next[1] >= m || + map[next[0]][next[1]] === 0 || + visited[next[0]][next[1]] > 0 + ) + continue; + q.push(next); + visited[next[0]][next[1]] = visited[top[0]][top[1]] + 1; + if (next[0] === n - 1 && next[1] === m - 1) { + flag = true; + break; } } - cnt++; - isFirst = !isFirst; - if (flag) break; } -console.log(cnt); +console.log(visited[n - 1][m - 1]);