문제
풀이
- 이전에 푼 문제와 매우 유사하다. 차이점은 2차원에서 3차원으로 z축이 생겼다는 점이 있다.
- 그래프 탐색문제이며 인근 노드를 탐색하여 최소 일자를 찾아야하는 문제이므로
BFS 알고리즘
으로 접근하였다.
코드
import sys
from collections import deque
input = sys.stdin.readline
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
def bfs():
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 nx < 0 or nx >= n or ny < 0 or ny >= m or nz < 0 or nz >= h:
continue
if graph[nz][nx][ny] == 0:
graph[nz][nx][ny] = graph[z][x][y] + 1
queue.append((nx, ny, nz))
def solve():
bfs()
result = 0
for z in graph:
for tomato in z:
if 0 in tomato:
return -1
max_ = max(tomato)
result = max(max_, result)
return result - 1
if __name__ == '__main__':
m, n, h = map(int, input().split())
graph = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)]
queue = deque()
for z in range(h):
for x in range(n):
for y in range(m):
if graph[z][x][y] == 1:
queue.append((x, y, z))
print(solve())
결과
출처 & 깃허브
BOJ 7569
github