토마토
저번에 이 문제를 풀었던 기억이 나서 어렵지 않게 풀었다.
차원이 하나 추가된다는 것만 조건에 추가해주면 된다 .
한달 전에 푼 문제인데 새삼 실력 많이 늘었다는 것을 느꼈다 (감격 ,,)
from collections import deque
import sys
input = sys.stdin.readline
m, n, h = map(int, input().split())
graph = [[] for _ in range(h)]
for i in range(h):
for j in range(n):
graph[i].append(list(map(int, input().split())))
# 3차원 배열
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
#방문처리는 해주기
visited = [[[False]*m for _ in range(n)] for _ in range(h)]
q = deque()
# 1인 좌표 큐에 넣고 시작
for i in range(h):
for j in range(n):
for k in range(m):
if graph[i][j][k] == 1:
q.append([i, j, k])
def bfs():
while q:
z, x, y = q.popleft()
for i in range(6):
nz = z + dz[i]
nx = x + dx[i]
ny = y + dy[i]
if nz < 0 or nz >= h or nx < 0 or ny < 0 or nx >= n or ny >= m :
continue
# 방문 안했고 인접한 노드가 0이면 현재 내 값에서 1 더해줌
if graph[nz][nx][ny] == 0 and not visited[nz][nx][ny]:
visited[nz][nx][ny] = True
graph[nz][nx][ny] = graph[z][x][y] + 1
q.append([nz, nx, ny])
bfs()
answer = -1
for i in graph:
for j in i:
for k in j:
if k == 0:
print(-1)
exit()
if k > answer:
answer = k
print(answer-1)