[白俊-7569]トマト
質問する
リンク
コード#コード#
import sys
from collections import deque
input = sys.stdin.readline
m, n, h = map(int, input().split())
box = []
tomato = deque()
empty = 0
# box에 전체 토마토 저장
for i in range(h) :
box_tmp = []
for j in range(n) :
tmp = list(map(int, input().split()))
box_tmp.append(tmp)
for k in range(m) :
# 토마토가 익어있으면 tomato에 append
if tmp[k] == 1 :
tomato.append([i, j, k])
# 토마토가 없으면 empty + 1
elif tmp[k] == -1 :
empty += 1
box.append(box_tmp)
# 토마토 익히기
def solution() :
count = 0
while tomato :
num = len(tomato)
for _ in range(num) :
a, b, c = tomato.popleft()
for p, q, r in ([-1, 0, 0], [1, 0, 0], [0, 0, -1], [0, -1, 0], [0, 0, 1], [0, 1, 0]) :
if 0 <= a+p < h and 0 <= b+q < n and 0 <= c+r < m :
if box[a+p][b+q][c+r] == 0 :
box[a+p][b+q][c+r] = 1
tomato.append([a+p, b+q, c+r])
count += 1
return count
# 익은 토마토가 없을 경우 -1 출력
if len(tomato) == 0 :
print(-1)
# 빈 공간을 제외하고 모든 토마토가 익어있을 경우 0 출력
elif len(tomato) + empty == m*n*h :
print(0)
else :
cnt = solution()
for i in range(h) :
for j in range(n) :
# 토마토가 모두 익지 못하는 상황
if 0 in box[i][j] :
print(-1)
exit(0)
# 토마토가 모두 익었을 경우
print(cnt-1)
この問題はBFSで解決できる.前回解答した問題トマトを三次配列に変更します.
最後に1を減算したのは、cntの1日目にすべて成熟したが、
初日を基準に、数日後に最低日数を出力するように要求したからだ.
Reference
この問題について([白俊-7569]トマト), 我々は、より多くの情報をここで見つけました https://velog.io/@malgam/백준-7569-토마토テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol