๐ ๋ฌธ์
๋น์ ์ ์๋ฒ ๋น๋ฉ์ ๊ฐํ๊ณ ๋ง์๋ค. ์ฌ๊ธฐ์ ํ์ถํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๊ธธ์ ๋ฌด์์ผ๊น? ์๋ฒ ๋น๋ฉ์ ๊ฐ ๋ณ์ ๊ธธ์ด๊ฐ 1์ธ ์ ์ก๋ฉด์ฒด(๋จ์ ์ ์ก๋ฉด์ฒด)๋ก ์ด๋ฃจ์ด์ ธ์๋ค. ๊ฐ ์ ์ก๋ฉด์ฒด๋ ๊ธ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ด ์ง๋๊ฐ ์ ์๊ฑฐ๋, ๋น์ด์์ด์ ์ง๋๊ฐ ์ ์๊ฒ ๋์ด์๋ค. ๋น์ ์ ๊ฐ ์นธ์์ ์ธ์ ํ 6๊ฐ์ ์นธ(๋,์,๋จ,๋ถ,์,ํ)์ผ๋ก 1๋ถ์ ์๊ฐ์ ๋ค์ฌ ์ด๋ํ ์ ์๋ค. ์ฆ, ๋๊ฐ์ ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฒ ๋น๋ฉ์ ๋ฐ๊นฅ๋ฉด๋ ๋ชจ๋ ๊ธ์ผ๋ก ๋งํ์์ด ์ถ๊ตฌ๋ฅผ ํตํด์๋ง ํ์ถํ ์ ์๋ค.
๋น์ ์ ์๋ฒ ๋น๋ฉ์ ํ์ถํ ์ ์์๊น? ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ์ผ๋ง๋ ๊ฑธ๋ฆด๊น?
์ ๋ ฅ
์
๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ
์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ฐ ํ
์คํธ ์ผ์ด์ค๋ ์ธ ๊ฐ์ ์ ์ L, R, C๋ก ์์ํ๋ค. L(1 ≤ L ≤ 30)์ ์๋ฒ ๋น๋ฉ์ ์ธต ์์ด๋ค. R(1 ≤ R ≤ 30)๊ณผ C(1 ≤ C ≤ 30)๋ ์๋ฒ ๋น๋ฉ์ ํ ์ธต์ ํ๊ณผ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ธ๋ค.
๊ทธ ๋ค์ ๊ฐ ์ค์ด C๊ฐ์ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง R๊ฐ์ ํ์ด L๋ฒ ์ฃผ์ด์ง๋ค. ๊ฐ ๋ฌธ์๋ ์๋ฒ ๋น๋ฉ์ ํ ์นธ์ ๋ํ๋ธ๋ค. ๊ธ์ผ๋ก ๋งํ์์ด ์ง๋๊ฐ ์ ์๋ ์นธ์ '#'์ผ๋ก ํํ๋๊ณ , ๋น์ด์๋ ์นธ์ '.'์ผ๋ก ํํ๋๋ค. ๋น์ ์ ์์ ์ง์ ์ 'S'๋ก ํํ๋๊ณ , ํ์ถํ ์ ์๋ ์ถ๊ตฌ๋ 'E'๋ก ํํ๋๋ค. ๊ฐ ์ธต ์ฌ์ด์๋ ๋น ์ค์ด ์์ผ๋ฉฐ, ์
๋ ฅ์ ๋์ L, R, C๊ฐ ๋ชจ๋ 0์ผ๋ก ํํ๋๋ค. ์์ ์ง์ ๊ณผ ์ถ๊ตฌ๋ ํญ์ ํ๋๋ง ์๋ค.
์ถ๋ ฅ
๊ฐ ๋น๋ฉ์ ๋ํด ํ ์ค์ฉ ๋ต์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋น์ ์ด ํ์ถํ ์ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ค.
Escaped in x minute(s).
์ฌ๊ธฐ์ x๋ ์๋ฒ ๋น๋ฉ์ ํ์ถํ๋ ๋ฐ์ ํ์ํ ์ต๋จ ์๊ฐ์ด๋ค.
๋ง์ผ ํ์ถ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ค.
Trapped!
์ ์ถ๋ ฅ ์
์์ ์ ๋ ฅ | ์์ ์ถ๋ ฅ |
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### |
Escaped in 11 minute(s). Trapped! |
โ๏ธ ํ์ด
์ด๋ฌธ์ ๋ BFS ๋ฌธ์ ์๋ค. ๋ค๋ง ์กฐ๊ธ ํน์ดํ์ ์ด 3์ฐจ์์ด๋ผ๋ ์ ์ด๋ค.
3์ฐจ์์ผ๋ก ๋์ด์์ด ์กฐ๊ธ ๋ณต์กํ๋ค๊ณ ์๊ฐํ๊ณ ํ ์คํธ์ผ์ด์ค๊ฐ ์ฌ๋ฌ๊ฐ๋ก ์ ๋ ฅ๋์๊ธฐ ๋๋ฌธ์ ์ด ๊ณผ์ ์ด ์กฐ๊ธ ๊น๋ค๋ก์ ๋ค. ๋๋ L, R, C๊ฐ ์ฃผ์ด์ง๋ ๊ฒ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ๋ค. ์ฒ์ L, R, C๊ฐ ์ฃผ์ด์ง๋ฉด ๋ณ์์ ํ ๋นํด๋๊ณ map์ ๊ตฌ์ฑํ๋ค. tempArr์ด๋ผ๋ ์์ ๋ฐฐ์ด์ ์ ์ธํด๋๊ณ ์ธต๋ง๋ค ๋น ์ค๋ก ๊ตฌ๋ถ๋์ด ๋น ์ค์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ฉด map์ด๋ผ๋ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์์๋ฐฐ์ด tempArr์ ์ ๋ ฅ๊ฐ์ ๋ฃ์๋ค.
์ด๋ ๊ฒ ๋๋ค๋ณด๋ฉด map์ ๋ชจ๋ ๊ตฌ์ฑํ๊ณ ์๋ก์ด L, R, C๊ฐ ์ฃผ์ด์ง๋ฉด ์ด๋ BFS๋ฅผ ๋๋ฆฌ๊ณ ์๋ก L, R, C์ ๊ฐ์ ํ ๋นํ๊ณ map์ ๊ตฌ์ฑํ๊ธฐ ์์ํ๋ค. ๋ง์ฝ "0 0 0"์ด L, R, C์ ํ ๋นํ์ง๋ง ๋ค์ ์ ๋ ฅ๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ์์ฐ์ค๋ ํจ์๊ฐ ์ข ๋ฃ๋๋ค.
BFS ํจ์๋ check๋ฐฐ์ด๊ณผ queue ๋ฐฐ์ด, cnt ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ๋์ํ๋ค. ์ต์ ๋์์ ๋ฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ ์ํฉ์์ ์ด๋ํ ์ ์๋ ๊ณณ์ ๋ชจ๋ queue์ ๋ฃ๊ณ ์ด๋์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๊ณ ์ด๋งํผ ๋ฐ๋ณตํ๋ค. ํด๋น ๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋๋ฉด ๋ค์ ๋์ ํ์์ ๊ฐ ์ ์๋ ์์น๊ฐ queue์ ์๋ก์ด ์ ์ฅ๋๋ค. 3์ฐจ์์ด๊ธฐ ๋๋ฌธ์ z, x, y ์ธ๊ฐ์ ๋ณ์(์ธ๋ฑ์ค)๋ก ํด๋น ์์น๊ฐ ๊ฐ ์ ์๋์ง("."), ๊ฐ ์ ์๋์ง("#"), ํ์ถ๊ตฌ์ธ์ง("E")๋ฅผ ํ์ธํ๊ณ check ๋ฐฐ์ด์ ๋ฐ๋ผ ๋ฐฉ๋ฌธํ๋ ์์น๋ ์ ์ธํ๊ณ ํ์ํ๋ค.
๋ฐํ๋ ๊ฐ์ cnt์ธ๋ฐ ๋ง์ฝ ๋ชจ๋ ๋์์ ์ํํ์์๋ ํ์ถ๊ตฌ("E")์ ๋์ฐฉํ์ง ๋ชปํ๋ฉด 0์ ๋ฐํํ๊ณ ๋ฐํ๋ ๊ฐ์ด ์ ํจํ์ง์ ๋ฐ๋ผ ์ผํญ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅํ๋ค.
โจ๏ธ ์ฝ๋
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './testcase/6593.txt';
let inputs = fs.readFileSync(filePath).toString().trim().split('\n');
const dx = [-1, 0, 1, 0, 0, 0];
const dy = [0, 1, 0, -1, 0, 0];
const dz = [0, 0, 0, 0, -1, 1];
const bfs = (board, L, R, C) => {
const check = [...new Array(L)].map(_ => [...new Array(R)].map(_ => new Array(C).fill(0)));
let start;
outer: for (let i = 0; i < L; i++) {
for (let j = 0; j < R; j++) {
for (let k = 0; k < C; k++) {
if (board[i][j][k] === 'S') {
start = [i, j, k];
break outer;
}
}
}
}
const queue = [start];
let cnt = 0;
check[start[0]][start[1]][start[2]] = 1;
while (queue.length) {
const len = queue.length;
for (let i = 0; i < len; i++) {
const [z, x, y] = queue.shift();
for (let k = 0; k < 6; k++) {
const zz = z + dz[k];
const xx = x + dx[k];
const yy = y + dy[k];
if (zz < 0 || zz >= L || xx < 0 || xx >= R || yy < 0 || yy >= C) continue;
if (board[zz][xx][yy] === '#') continue;
if (check[zz][xx][yy]) continue;
if (board[zz][xx][yy] === 'E') return cnt + 1;
check[zz][xx][yy] = 1;
queue.push([zz, xx, yy]);
}
}
cnt += 1;
}
return 0;
};
let map = [];
let tempArr = [];
let L, R, C;
for (const input of inputs) {
const temp = input.split(' ').map(Number);
if (temp.length >= 3) {
if (map.length) {
const res = bfs(map, L, R, C);
console.log(res ? `Escaped in ${res} minute(s).` : 'Trapped!');
}
[L, R, C] = temp;
map = [];
} else {
if (!input) {
map.push([...tempArr]);
tempArr = [];
} else {
tempArr.push(input);
}
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋์ 2 (๋ฐฑ์ค - 2294) (0) | 2023.05.08 |
---|---|
[Algorithm] ํจ์ ์ ์ ํด๋น (๋ฐฑ์ค - 9375) (0) | 2023.05.07 |
[Algoruthm] ์นจํฌ (๋ฐฑ์ค - 13565) (0) | 2023.05.03 |
[Algorithm] ์ ํ ์ ํ (๋ฐฑ์ค - 11060) (0) | 2023.05.02 |
[Algorithm] ๋ฆฌ๋ชจ์ปจ (๋ฐฑ์ค - 1107) (0) | 2023.05.01 |