Open robert-min opened 5 months ago
⏰ 소요 시간 : 20분 🗂️ 유형 : BFS - 3차원
🖌️ 문제 풀이
"""
Return : 토마토가 익는 최소 일수
- 1일 => 상하좌우, 위아래 익음
- 3차원 BFS 탐색
"""
import sys
from collections import deque
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
def bfs(start):
global cnt, day
while start:
Q = deque(start)
day += 1
start = []
while Q:
x, y, z = Q.popleft()
for k in range(6):
nx = x + dx[k]
ny = y + dy[k]
nz = z + dz[k]
if nx < 0 or nx >= N: continue
if ny < 0 or ny >= M: continue
if nz < 0 or nz >= H: continue
if matrix[nz][nx][ny] == 0:
cnt -= 1
matrix[nz][nx][ny] = 1
start.append((nx, ny, nz))
if __name__ == "__main__":
input = sys.stdin.readline
M, N, H = map(int, input().split())
matrix = []
start = []
cnt = 0
day = -1
for k in range(H):
temp = []
for i in range(N):
row = list(map(int, input().split()))
for j, val in enumerate(row):
if val == 1:
start.append((i, j, k))
elif val == 0:
cnt += 1
temp.append(row)
matrix.append(temp)
if cnt == 0: # 익지 않은 사과가 없을 경우 => 0(탐색할 필요X)
print(0)
else:
bfs(start) # 탐색
if cnt == 0: # 탐색 후 모든 사과가 익은 경우 => day
print(day)
else:
print(-1) # 탐색 후 익지 않은 사과가 있는 경우 => -1
문제 추천 이유!!
문제 링크
https://www.acmicpc.net/problem/7569
*작성가이드 입니다.
아래는 comment 템플릿입니다.(복사해서 사용)