

// const { count } = require("console");
const fs = require("fs");
const { nextTick } = require("process");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
let input = fs.readFileSync(filePath).toString().trim();
// const fs = require('fs');
// let input = fs.readFileSync("/dev/stdin").toString().trim();
input=input.split('\n')
// [x, y, z]
const directions = [
[-1, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, -1, 0],
[0, 0, 1],
[0, 0, -1],
];
const [M, N, H] = input.shift().split(" ").map(Number);
// 1인 지점을 먼저 queue에 모두 넣어 주어야 하기 때문에
// queue를 밖에서 만들어 주어야 한다.
let queue = [];
let visited = [...Array(H)].map((h) =>
[...Array(N)].map((n) => Array(M).fill(0))
);
let count = M * N * H;
let z = 0;
let answer;
// 1인 부분을 미리 queue에 넣어준다.
for (let i = 0; i < input.length; i++) {
let box = input[i].split(" ").map(Number);
box.forEach((tomato, pos) => {
if (tomato === 1) {
queue.push([i % N, pos, z, 0]);
visited[z][i % N][pos] = 1;
count--;
} else if (tomato === -1) {
visited[z][i % N][pos] = 1;
count--;
}
});
if ((i + 1) % N === 0) ++z;
}
let index = 0;
while (queue.length != index) {
const [x, y, z, pos] = queue[index];
for (let i = 0; i < directions.length; i++) {
const xPos = x + directions[i][0];
const yPos = y + directions[i][1];
const zPos = z + directions[i][2];
if (xPos < 0 || yPos < 0 || zPos < 0 || xPos >= N || yPos >= M || zPos >= H)
continue;
if (!visited[zPos][xPos][yPos]) {
visited[zPos][xPos][yPos] = 1;
queue.push([xPos, yPos, zPos, pos + 1]);
count--;
}
}
index++;
answer = pos;
}
console.log(count ? -1 : answer);
https://mine-it-record.tistory.com/612
1인 부분을 미리 queue에 넣어주기 위해 queue를 밖에서 선언을 해 주었다.