๐ก ์ ๊ทผ๋ฒ
๋ฉฐ์น ์ด ์ง๋๋ฉด ํ ๋งํ ๋ค์ด ๋ชจ๋ ์ต๋์ง, ๊ทธ ์ต์ ์ผ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ
์ต์ ์ผ์๋ฅผ ๊ตฌํด์ผ ํ๊ณ , ์ต์ ํ ๋งํ ์ธ์ ํ ๋งํ ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ต์ผ๋๊น
=> BFS
1. ์ต์ ํ ๋งํ ๋ฅผ ๋ชจ๋ ํ์ ๋ฃ์ด์ค๋ค2. ์ต์ ํ ๋งํ ์ ์ธ์ ํ๊ณ ์์ง ์ต์ง ์์ ํ ๋งํ ๋ ํ์ ๋ฃ์ด์ค๋ค
2-1. ๋ฐ์ค ์์๋ ํ์ธ
2-2. ๊ฐ์ ๋ฐ์ค์์ ์ํ์ข์ฐ ํ์ธ3. ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
class Node {
constructor(val) {
this.val = val;
this.next = null;
}
}
class Queue {
constructor() {
this.start = null;
this.end = null;
this.size = 0;
}
enqueue(val) {
const newNode = new Node(val);
if (!this.start) {
this.start = newNode;
this.end = newNode;
} else {
this.end.next = newNode;
this.end = newNode;
}
return ++this.size;
}
dequeue() {
if (!this.start) return null;
const tmp = this.start;
if (this.start === this.end) {
this.end === null;
}
this.start = this.start.next;
this.size--;
return tmp.val;
}
}
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
// ์
๋ ฅ๊ฐ์ด ์ฒซ ๋ฒ์งธ ์ค์๋ ์
๋ ฅ ๊ฐ์ ๊ธธ์ด(n), n๊ฐ์ ์ค์ ๊ฑธ์ณ์ ํ ์ค์ ํ๋์ ์
๋ ฅ๊ฐ์ด ์ฃผ์ด์ง ๋
const [n, ...input] = require('fs')
.readFileSync(filePath)
.toString()
.trim()
.split('\n');
function solution(M, N, H, box) {
//BFS!!!
const boxes = [];
const queue = new Queue();
const dh = [1, -1];
const dr = [1, -1, 0, 0];
const dc = [0, 0, 1, -1];
let max = 0;
let tomatoes = 0;
//๋ฐ์ค 3์ฐจ์ ๋ฐฐ์ด๋ก ์ด๊ธฐํ
for (let i = 0; i < H; i++) {
const tmp = [];
for (let j = 0; j < N; j++) {
tmp.push([...box[i * N + j]]);
}
boxes.push(tmp);
}
//3์ฐจ์ ๋ฐฐ์ด ๋๋ฉด์ ์ต์ ํ ๋งํ ๋ ํ์ ๋ฃ๊ธฐ
//์ ์ต์ ํ ๋งํ ๊ฐ์ ์ธ๊ธฐ
for (let i = 0; i < H; i++) {
for (let j = 0; j < N; j++) {
for (let k = 0; k < M; k++) {
if (boxes[i][j][k] === 1) {
//ํ์๋ ํ ๋งํ ๊ฐ ๋ด๊ธด ๋ฐ์ค ์ ๋ณด H, N, M์
//ํด๋น ํ ๋งํ ๊ฐ ์ต๊ธฐ๊น์ง ํ์ํ ์ต์ ์ผ์๋ฅผ ๋ฃ์ด์ค
queue.enqueue([i, j, k, 0]);
} else if (boxes[i][j][k] === 0) {
tomatoes++;
}
}
}
}
//ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
while (queue.size) {
const val = queue.dequeue();
//ํ ๋งํ ์์น H, R, C, ์ต์ ์ผ์
const [h, r, c, cnt] = val;
max = Math.max(max, cnt);
//์์๋ ํ์ธ
//์ต์ ํ ๋งํ ์ ์ธ์ ํ๊ณ ์์ง ์ ์ต์ ํ ๋งํ ๋ง ํ์ ๋ฃ์ด์ค
for (let i = 0; i < 2; i++) {
if (h + dh[i] >= 0 && h + dh[i] < H && boxes[h + dh[i]][r][c] === 0) {
boxes[h + dh[i]][r][c] = 1;
queue.enqueue([h + dh[i], r, c, cnt + 1]);
tomatoes--;
}
}
//์ํ์ข์ฐ ํ์ธ
//์ต์ ํ ๋งํ ์ ์ธ์ ํ๊ณ ์์ง ์ ์ต์ ํ ๋งํ ๋ง ํ์ ๋ฃ์ด์ค
for (let j = 0; j < 4; j++) {
if (
r + dr[j] >= 0 &&
r + dr[j] < N &&
c + dc[j] >= 0 &&
c + dc[j] < M &&
boxes[h][r + dr[j]][c + dc[j]] === 0
) {
boxes[h][r + dr[j]][c + dc[j]] = 1;
queue.enqueue([h, r + dr[j], c + dc[j], cnt + 1]);
tomatoes--;
}
}
}
//์ ์ต์ ํ ๋งํ ๊ฐ ๋จ์์์ผ๋ฉด -1, ์๋๋ฉด ์ผ์ ์ถ๋ ฅ
return tomatoes > 0 ? -1 : max;
}
const nArr = n.split(' ').map(Number);
const answer = solution(
nArr[0],
nArr[1],
nArr[2],
input.map((r) => r.split(' ').map(Number)),
);
console.log(answer);
'๐ง ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค][PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ JSํ์ด (0) | 2023.12.29 |
---|---|
[๋ฐฑ์ค] 2573 ๋น์ฐ js ํ์ด (1) | 2023.12.28 |
[๋ฐฑ์ค] 4179 ๋ถ! js ํ์ด (1) | 2023.12.27 |
๋ฐฑ์ค JS ์ ๋ ฅ๊ฐ ํ ํ๋ฆฟ(VSCode ์ค๋ํซ์ผ๋ก ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ) (0) | 2023.12.27 |
[ํ๋ก๊ทธ๋๋จธ์ค]๊ด๋ฌผ ์บ๊ธฐ JS (0) | 2023.12.27 |