[백준/파이썬] 7569번 토마토 풀이

업데이트:



문제 정보


풀이

문제

3차원 상자에서 익은 토마토가 인접 칸으로 퍼질 때, 모든 토마토가 익는 최소 일수를 구하는 문제입니다. 불가능하면 -1을 출력합니다.

코드

import sys;read=sys.stdin.readline
from collections import deque
m,n,h=map(int,read().split())
# tomatos[h][n][m]
tomatos=[[list(map(int,read().split()))for j in range(n)]for i in range(h)]
Q,d=deque([]),((0,0,-1),(0,0,1),(0,-1,0),(0,1,0),(-1,0,0),(1,0,0))
for i in range(h):
    for j in range(n):
        for k in range(m):
            if tomatos[i][j][k]==1:Q.append((i,j,k,tomatos[i][j][k]))
while Q:
    i,j,k,c=Q.popleft()
    for move in d:
        mi,mj,mk=i+move[0],j+move[1],k+move[2]
        if 0<=mi<h and 0<=mj<n and 0<=mk<m and tomatos[mi][mj][mk]==0:
            tomatos[mi][mj][mk]=c+1
            Q.append((mi,mj,mk,c+1))
f=False
for floor in tomatos:
    for row in floor:
        for tomato in row:
            if tomato==0:
                f=True
                break
        if f:break
    if f:break
print(-1 if f else c-1)

설명

모든 익은 토마토를 큐에 넣고 동시에 BFS를 시작해 각 칸에 익는 날짜를 기록합니다. 탐색 후 0이 남으면 -1, 아니면 마지막 날짜 기준 일수를 출력합니다.



댓글남기기