import sys
from collections import deque
X, Y, Z = list(map(int, sys.stdin.readline().rstrip().split()))
graph = [[[i for i in list(map(int, sys.stdin.readline().rstrip().split()))] for _ in range(Y)] for _ in range(Z)]
dx = [0, 0, 1, -1, 0, 0]
dy = [1, -1, 0, 0, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
q = deque()
perfect = True
for z in range(Z):
for y in range(Y):
for x in range(X):
if graph[z][y][x] == 1:
q.append((z, y, x))
if graph[z][y][x] == 0:
perfect = False
day = 0
while q:
prev_z, prev_y, prev_x = q.popleft()
for i in range(6):
next_z, next_y, next_x = prev_z + dz[i], prev_y + dy[i], prev_x + dx[i]
if 0 <= next_z < Z and 0 <= next_y < Y and 0 <= next_x < X:
if graph[next_z][next_y][next_x] == 0:
new_day = graph[prev_z][prev_y][prev_x] + 1
q.append((next_z, next_y, next_x))
graph[next_z][next_y][next_x] = new_day
day = new_day
error = False
for z in range(Z):
if error: break
for y in range(Y):
if error: break
for x in range(X):
if graph[z][y][x] == 0:
error = True
if perfect:
print(0)
elif error:
print(-1)
else:
print(day - 1)
3차원 배열이라... 코드 쓰면서 이게 맞나 싶은 점들이 있었다.
우선 촌수 계산 문제처럼 방문 노드가 이전 노드에서 몇 번째 멀어진건지를 계산했는데, +1씩 하다보니까 기존에 1로 되어있던 놈들때문에 어쩔수없이 -1을 해줬다.
그러다보니 처음부터 다 익어있는 애들이 -1로 표기되는 문제가 있었고, 결국 res
리스트를 추가해서 검사할까, 아니면 처음에 그냥 다 익어있는 애들에 대한 플래그를 세울까 하다가 후자로 선택했다.
3차원 배열만 아니었으면 크게 어려운 문제는 아니었던 것 같다..!