[JS] ํ๋ก๊ทธ๋๋จธ์ค ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ
Problem
Solution
ํด๋น ๋ฌธ์ ๋ BFS๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ์ด๊ธฐ ํ๊ณผ ์ด์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ค.
const N = maps.length
const M = maps[0].length
2. ์ํ์ข์ฐ๋ก ์์ง์ผ x์ y์ ๊ฐ์ ์ ์ฅํ๋ค.
const direction = [[0, -1], [0, 1], [-1, 0], [1, 0]]
3. ๋งต์ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ํ ๊ฒน ๊ฐ์ธ์ค๋ค.
๋งต์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฒ ๋๋ฉด 0์ผ๋ก ๊ฐ์ฃผํ ์ ์๊ฒ ๊ฐ์ฅ ์๋ฆฌ๋ฅผ ๊ฐ์ธ์ค๋๋ค.
let map = maps
wrapEdges(map)
์ด์ 0๋ฒ์งธ์ ๋งจ ๋๋ฒ์งธ, ํ์ 0๋ฒ์งธ์ ๋งจ ๋๋ฒ์งธ์ 0์ ๋ฃ์ด์ค๋๋ค.
function wrapEdges(maps) {
for (m of maps) {
m.splice(0, 0, 0);
m.push(0)
}
maps.splice(0, 0, new Array(maps.length + 2).fill(0));
maps.push(new Array(maps.length + 1).fill(0));
}
4. BFS๋ก ๊ฐ ๋ฐฉํฅ์ผ๋ก ์์ง์ผ ์ ์๊ฒ ์งํํ๋ค.
queue๋ฅผ ๋ง๋ค๊ณ ์์์ ์ ์์น์ ์์ง์ธ ํ์๋ฅผ ๋ฃ์ด์ค๋๋ค.
map์ ์์ ์ง์ ์ 0์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
let queue = [[1, 1, 1]]
map[1][1] = 0
queue์์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๊บผ๋ด์ด ๋ชฉํ ์ง์ (N,M)์ ๋์ฐฉํ์๋ค๋ฉด ์์ง์ธ ํ์๋ฅผ ๋ฐํํด ์ค๋๋ค.
๊ทธ๊ฒ ์๋๋ผ๋ฉด ๊ฐ ๋ฐฉํฅ๋ง๋ค ์บ๋ฆญํฐ์ ์์น๋ฅผ ๋ฐ๊ฟ ์งํํด ์ค๋๋ค.
๋จ, ๋ฌดํ ๋ฃจํ๋ฅผ ๋ง๊ธฐ ์ํด ์ด๋ฏธ ๋ฐฉ๋ฌธํ์๋ค๋ฉด ํด๋น ์์น๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ค๋๋ค.
while (queue.length > 0) {
const [x,y,count] = queue.shift()
if (x == N && y == M) {
return count
}
for (d of direction) {
const next = [x + d[0],y + d[1],count+1]
if (map[next[0]][next[1]] === 1) {
map[next[0]][next[1]] = 0
queue.push(next)
}
}
}
5. ์บ๋ฆญํฐ๊ฐ ๋ชฉํ ์ง์ ์ ์ค์ง ๋ชปํ๋ค๋ฉด -1์ ๋ฐํํ๋ค.
while๋ฌธ ์์์ return์ด ๋ฐ์ํ์ง ์์๋ค๋ฉด ๋ชฉํ ์ง์ ์ ์ค์ง ๋ชปํ ๊ฒ์ด๋ฏ๋ก -1์ ๋ฐํํด ์ค๋๋ค.
return -1
Source Code
P.S
์ค๋๋ง์ JS๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ์๋๋ฐ Swift์ ๊ฐ์ด struct๋ฅผ ๋ง๋ค์ง ๋ชปํด map์ ์ด์ฉํด ๊ฐ์ฒด์ฒ๋ผ ํ์๋๋ฐ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์๋ฅผ ๋ค๋ฉด ๋ฐฉํฅ์ ์ ํ ๋ {x:0,y:1}, ํ ์์ ๋ค์ด๊ฐ ์ ๋ณด๋ {x:0,y1,count:1} ์ด๋ฐ ์์ผ๋ก ํ์๋๋ฐ ๋ค์๋ถํฐ๋ ๊ทธ๋ฅ ๋ฐฐ์ด๋ก ํ์ด์ผ๊ฒ ๋ค..