[python] 백준 - 7569 (토마토)
골드5 문제이며, 제한 시간은 1초이다.
문제


해결 과정
이전 토마토 문제에서 단순히 높이가 추가된 문제이므로 3차원 리스트를 사용하고, 3차원으로 탐색하면 된다. 3차원 탐색은 처음해봤지만 그냥 2차원이랑 똑같은 매커니즘으로 돌아가서 어렵지 않았다.
풀이
from collections import deque
def bfs():
queue = deque()
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:
z, x, y = queue.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dh[i]
if 0 <= nx < n and 0 <= ny < m and 0 <= nz < h and graph[nz][nx][ny] == 0:
graph[nz][nx][ny] = graph[z][x][y] + 1
queue.append((nz, nx, ny))
m, n, h = map(int, input().split())
graph = []
temp = []
for _ in range(h):
for _ in range(n):
temp.append(list(map(int, input().split())))
graph.append(temp)
temp = []
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dh = [0, 0, 0, 0, -1, 1]
bfs()
flag = False
for i in range(h):
if flag: break
for j in range(n):
if flag: break
for k in range(m):
if graph[i][j][k] == 0:
flag = True
break
if flag:
print(-1)
else:
max_value = max(max(max(sublist) for sublist in submatrix) for submatrix in graph)
print(max_value - 1)알게된 점
파이썬에서 3차원 리스트를 입력받는 부분을 알게되었고, 아직도 max값 출력할 때 max 내장함수를 이용해서 한 번에 계산하는게 헷갈린다.

댓글
0아직 댓글이 없습니다.