문제
문제가 너무 길어서 링크로 대체
풀이
- 기존 토마토 문제에서 위 아래로 틀을 여러겹 쌓아 탐색의 범위를 넓힌 문제이다.
- 좌표평면 탐색을 dx, dy, dz 로 총 6방향으로 탐색하면 토마토1 과 다를게 없다!
- 2차평면에 비해서 탐색해야할게 많아서 입력값을 input에서 sys.stdin.readline으로 바꿔야 한다.
전체코드
import sys
from collections import deque
r = sys.stdin.readline
def bfs():
while queue:
height, line, seq = queue.popleft()
for i in range(6):
a = height + dz[i]
b = line + dy[i]
c = seq + dx[i]
if 0 <= a < h and 0 <= b < n and 0 <= c < m and graph[a][b][c] == 0:
queue.append([a, b, c])
graph[a][b][c] = graph[height][line][seq] + 1
day = 0
for i in graph:
for j in i:
for k in j:
if k == 0:
return -1
day = max(day, max(j))
return day - 1
if __name__ == '__main__':
dx = [1, 0, 0, -1, 0, 0]
dy = [0, 1, 0, 0, -1, 0]
dz = [0, 0, 1, 0, 0, -1]
queue = deque()
m, n, h = map(int, r().split())
graph = list(list(list(map(int, r().split())) for _ in range(n)) for _ in range(h))
for height in range(len(graph)):
for line in range(len(graph[height])):
for seq in range(len(graph[height][line])):
if graph[height][line][seq] == 1:
queue.append([height, line, seq])
print(bfs())