from collections import deque
def bfs():
while q:
x, y = q.popleft()
for i in range(0, 4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<N and 0<=ny<M and l[nx][ny] == 0:
q.append((nx, ny))
l[nx][ny] = l[x][y] + 1 # 익음
M, N = map(int, input().split()) # 행이 N, 열이 M
l = []
for i in range(0, N):
l.append(list(map(int, input().split())))
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
q = deque()
for i in range(0, N):
for j in range(0, M):
if l[i][j] == 1:
q.append((i, j))
bfs()
maximum = 0
for i in range(0, N):
for j in range(0, M):
if l[i][j] == 0:
print(-1)
exit()
maximum = max(maximum, l[i][j])
print(maximum-1)
from collections import deque
def bfs():
while q:
x, y, z = q.popleft()
for i in range(0, 6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0<=nx<H and 0<=ny<N and 0<=nz<M and l[nx][ny][nz] == 0:
q.append((nx, ny, nz))
l[nx][ny][nz] = l[x][y][z] + 1
dx = [-1, 0, 1, 0, 0, 0]
dy = [0, 1, 0 ,-1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
M, N, H = map(int, input().split()) # M: 열, N: 행, H: 높이
l = []
for i in range(0, H):
tmp = []
for j in range(0, N):
tmp.append(list(map(int, input().split())))
l.append(tmp)
q = deque()
for i in range(0, H):
for j in range(0, N):
for k in range(0, M):
if l[i][j][k] == 1:
q.append((i, j, k))
bfs()
maximum = 0
for i in range(0, H):
for j in range(0, N):
for k in range(0, M):
if l[i][j][k] == 0:
print(-1)
exit()
else:
maximum = max(maximum, l[i][j][k])
print(maximum - 1)
3차원 배열 처리는 이렇게 하는구나
삼중 for문에서 H가 가장 바깥으로 나온다는 걸 생각 못함