728x90
백준 7569 토마토
from collections import deque
m,n,h = map(int, input().split())
graph = []
for _ in range(h):
graph.append([ list(map(int,input().split())) for _ in range(n) ])
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]
queue = deque()
def bfs():
for i in range(h):
for j in range(n):
for k in range(m):
if graph[i][j][k] == 1:
queue.append((i,j,k))
while queue:
x,y,z = queue.popleft()
for i in range(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 :
if graph[nx][ny][nz] == 0 :
queue.append((nx,ny,nz))
graph[nx][ny][nz] = graph[x][y][z] + 1
bfs()
R = []
for i in range(h):
for j in range(n):
if 0 in graph[i][j]:
R.append(0)
else:
R.append(max(graph[i][j]))
if 0 in R:
print(-1)
else:
print(max(R)-1)
처음에 2차원 배열로 풀려다가 상자 층이 넘어가는 것을
인접면으로 탐색하는 걸 해결 못해서 포기했다.
결국 3차원으로 풀었는데 어제 풀었던 7576번 문제와 똑같고
차원이 하나 추가돼서 좌표설정만 헷갈리지 않으면 됐다.
728x90
'Algorithm' 카테고리의 다른 글
백준 1436 파이썬 (0) | 2022.01.13 |
---|---|
백준 1158 파이썬 (큐 풀이) (0) | 2022.01.13 |
백준 1181 파이썬 (0) | 2022.01.12 |
백준 1085 파이썬 (0) | 2022.01.11 |
백준 7576 파이썬 (0) | 2022.01.11 |