코드
from sys import stdin
from collections import deque
input = stdin.readline
dx = [0,0,0,0,1,-1]
dy = [0,0,1,-1,0,0]
dz = [1, -1,0,0,0,0]
queue = deque()
M, N, H = map(int, input().split())
graph = []
for _ in range(H):
graph.append([list(map(int, input().split())) for _ in range(N)])
for z in range(H):
for i in range(N):
for j in range(M):
if graph[z][i][j] == 1:
queue.append((z, i, j))
while queue:
z, x, y = queue.popleft()
for i in range(6):
nz = z + dz[i]
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= M or nz < 0 or nz >= H:
continue
if graph[nz][nx][ny] == -1:
continue
if graph[nz][nx][ny] == 0:
graph[nz][nx][ny] = graph[z][x][y] + 1
queue.append((nz, nx, ny))
flag = True
ans = 0
for z in graph:
for i in z:
for j in i:
ans = max(ans, j)
if j == 0:
flag = False
break
if flag:
print(ans-1)
else:
print(-1)
결과
풀이 방법
- 이차원 배열이 주어졌던 이전 토마토 문제에서, 3차원 배열이 주어지며 인접 토마토의 방향이 왼쪽, 오른쪽, y축으로 위,아래, z축으로 위,아래 6방향으로 늘어난 문제이다
- 기존의 로직에서 2차원 배열을 3차원 배열로, z축 방향을 계산하는 코드를 추가하면 되었다.