ํ์ด ๋ฐฉ๋ฒ
bfs๋ก ์ ๊ทผํ๊ธด ํ๋๋ฐ
ํ์ ๋ฃ์ด์ผ ํ๋ ๋
ธ๋๋ค๊ณผ ๋ฐฉ๋ฌธ ์ฒดํฌํด์ผ ํ๋ ๋
ธ๋๋ค์ ์๋ชป ์๊ฐํด์ ๊ณ์ ์ค๋ต์ฒ๋ฆฌ๊ฐ ๋๋๋ผ๊ตฌ์
์คํฐ๋์๋์ ํ์ด ๋ณด๊ณ ๊ฐ์ ์ก์์
๋ค์ ํ์์ต๋๋ค!
์ด์ ์ ํ์๋ bfs์ ๋ค๋ฅด๊ฒ ์ง๋์น ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ๋๊ฒ ์๋๋ผ
๋์ ๋ค๋ค๋ฅธ ๋
ธ๋๋ง ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํด์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์์์ต๋๋ค
1. ์ถ๋ฐ์ ๊ณผ ๋ชฉํ์ ์ ์ขํ๋ฅผ ์ ์ฅํฉ๋๋ค.
2. ์์์ ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๊ณ ํ์ ๋ฃ์ด์ค๋๋ค.
3. ํ์์ ๊บผ๋ธ ์ง์ ๋ถํฐ ์ํ์ข์ฐ๋ก ๋๋ฉด์ ํ ๋ฑกํฅ์ผ๋ก ๊ฐ ์ ์๋ ๋งํผ ๋๊น์ง ๊ฐ ๊ฒ
4. ๋์ฐฉํ ๋์ง์ ์ ๋ฐฉ๋ฌธํ์ง ์์ ์ํ๋ฉด cnt+1ํ๊ณ ํ์ ๋ฃ์ด์ค
(์ง๋๊ฐ๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ๋ฉด ์๋จ!! ์๋ํ๋ฉด ์ง๋๊ฐ๋ ๋
ธ๋๋ค์ ๋ค์ ์ง๋๊ฐ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌ, ํ์ง๋ง ์ด๋ฏธ ํ ๋ฒ ๋ฐฉ๋ฌธํ ๋์ง์ ์ ๊ฐ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ)
1. ๋ด ํ์ด
function solution(board) {
const dr = [-1, 1, 0, 0];
const dc = [0, 0, -1, 1];
let start;
let goal;
const r_length = board.length;
const c_length = board[0].length;
const visited = Array.from(new Array(r_length), () =>
new Array(c_length).fill(false),
);
const q = [];
//1. ์ถ๋ฐ์ ๊ณผ ๋ชฉํ์ ์ ์ขํ๋ฅผ ์ ์ฅํฉ๋๋ค.
for (let r = 0; r < r_length; r++) {
for (let c = 0; c < c_length; c++) {
if (board[r][c] === 'R') {
start = [r, c];
}
if (board[r][c] === 'G') {
goal = [r, c];
}
}
}
//์์์ ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๊ณ ํ์ ๋ฃ์ด์ค๋๋ค.
visited[start[0]][start[1]] = true;
q.push({ current_r: start[0], current_c: start[1], cnt: 0 });
//ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
while (q.length) {
const { current_r, current_c, cnt } = q.shift();
//๋ชฉํ์ ์ ๋์ฐฉํ๋ฉด ๋ฆฌํด
if (current_r === goal[0] && current_c === goal[1]) {
return cnt;
}
//์ํ์ข์ฐ๋ก ๋๋ฉด์ ํ ๋ฑกํฅ์ผ๋ก ๊ฐ ์ ์๋ ๋งํผ ๋๊น์ง ๊ฐ ๊ฒ
for (let i = 0; i < 4; i++) {
let next_r = current_r;
let next_c = current_c;
//๋ฐฐ์ด์ ๋์ ๋ค๋ค๋ฅด๊ฑฐ๋ ๋ฐฉํด๋ฌผ์ด ์กด์ฌํ๋ฉด ๋ฉ์ถค
while (
next_r + dr[i] >= 0 &&
next_r + dr[i] < r_length &&
next_c + dc[i] >= 0 &&
next_c + dc[i] < c_length &&
board[next_r + dr[i]][next_c + dc[i]] !== 'D'
) {
next_r += dr[i];
next_c += dc[i];
}
//๋์ฐฉํ ๋์ง์ ์ ๋ฐฉ๋ฌธํ์ง ์์ ์ํ๋ฉด cnt+1ํ๊ณ ํ์ ๋ฃ์ด์ค
if (!visited[next_r][next_c]) {
visited[next_r][next_c] = true;
q.push({ current_r: next_r, current_c: next_c, cnt: cnt + 1 });
}
}
}
return -1;
}
bfs์์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ์ด๋ค ์์ผ๋ก ํด์ผ ํ๋์ง
์๋ก์ด ์ ํ์ ํ๋ ๋ ์๊ฒ ๋ ๊ฒ ๊ฐ์์
'๐ง ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํผ์์ ํ๋ ํฑํํ JS (1) | 2024.01.03 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋น๊ตฌ ์ฐ์ต JS (0) | 2024.01.03 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณผ์ ์งํํ๊ธฐ JS (1) | 2024.01.03 |
[ํ๋ก๊ทธ๋๋จธ์ค][PCCP ๊ธฐ์ถ๋ฌธ์ ] 3๋ฒ / ์๋ ๋ก๊ทธ ์๊ณ JSํ์ด (0) | 2023.12.29 |
[ํ๋ก๊ทธ๋๋จธ์ค][PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ JSํ์ด (0) | 2023.12.29 |