https://www.acmicpc.net/problem/7569
import sys
from collections import deque
input = sys.stdin.readline
m, n, h = map(int, input().split())
box = [[list(map(int, input().split())) for _ in range(n)] for __ in range(h)]
def bfs(q):
moves = [(-1, 0, 0), (1, 0, 0),
(0, -1, 0), (0, 1, 0),
(0, 0, -1), (0, 0, 1)]
while q:
level, row, col = q.popleft()
for move in moves:
lv = level + move[0]
r = row + move[1]
c = col + move[2]
if 0 <= lv < h and 0 <= r < n and 0 <= c < m:
if box[lv][r][c] == 0:
box[lv][r][c] = box[level][row][col] + 1
q.append((lv, r, c))
# deque에 1이 있는 모든 위치를 넣고 시작
q = deque([])
answer = 0
for level in range(h):
for row in range(n):
for col in range(m):
if box[level][row][col] == 1:
q.append((level, row, col))
# bfs 실행
bfs(q)
# answer는 box에서의 최대값 - 1
answer = 0
for inner in box:
for row in inner:
for x in row:
answer = max(answer, x)
answer -= 1
# 토마토가 모두 익지는 못할 때 = 여전히 0이 존재할 때
for inner in box:
for row in inner:
if 0 in row:
answer = -1
break
print(answer)
상자의 수, 가로칸, 세로칸 -> 3차원 리스트로 나타내기
1(익은 토마토)가 있는 모든 위치를 deque에 넣고, BFS로 탐색한다 ⭐⭐⭐
토마토가 익는 데 며칠이 걸리는지를 계산하는 방법 🍅
토마토가 모두 익을 때까지 최소 며칠이 걸리는지를 계산하는 방법 🍅
어디에서 틀린지 몰라서 1시간을 끙끙댔는데
마지막에 전체 배열에서 최대 값을 구하는 과정에서
max(map(max, map(max, box)))
코드를 사용했다...! 넘나 생각 없이 코드를 짠 결과 없는 반례 찾아내기 지옥이라는 벌을 받았다... 🤦♂️
아주 기본적인 거지만, 주의하자는 의미로 이 문제에 대해서는 별개의 게시물로 다시 정리해서 올리자!