반응형
문제
https://www.acmicpc.net/problem/7569
문제 풀이
bfs 문제로, 다음 이동할 위치를 위아래 3차원까지 고려해주면 된다. 답 분기가 많아서 헷갈렸음
코드
import sys
input = sys.stdin.readline
import collections
M, N, H = map(int,input().split())
q = collections.deque()
tomato_tower = []
to_ripe = 0
for i in range(H):
tmp2 = []
for j in range(N):
tmp = list(map(int,input().split()))
for k in range(M):
if tmp[k] == 1:
q.append((i,j,k))
elif tmp[k] == 0:
to_ripe += 1
tmp2.append(tmp)
tomato_tower.append(tmp2)
move = {(-1,0,0), (1,0,0), (0,-1,0), (0,1,0), (0,0,-1), (0,0,1)}
day = 0
while q:
z,x,y = q.popleft()
for tz, tx, ty in move:
nz = tz + z
ny = ty + y
nx = tx + x
if 0<=nx<N and 0<=ny<M and 0<=nz<H and tomato_tower[nz][nx][ny] == 0:
tomato_tower[nz][nx][ny] = tomato_tower[z][x][y] + 1
q.append((nz,nx,ny))
to_ripe -= 1
day = max(day, tomato_tower[nz][nx][ny])
if to_ripe == 0:
print(day-1)
exit()
if to_ripe == 0: # 처음부터 다 익어있는 경우
print(to_ripe)
exit()
if to_ripe>0: # 못익히는 경우
print(-1)
exit()
print(day-1) # 다 익음
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[boj] 백준 11444 피보나치 수 6 python 풀이 (0) | 2023.07.21 |
---|---|
[boj] 백준 2589 보물섬 python 풀이 (0) | 2023.07.18 |
[boj] 백준 17836 공주님을 구해라! python 풀이 (0) | 2023.06.09 |
[boj] 백준 14405 피카츄 python 풀이 (0) | 2023.06.01 |
[boj] 백준 4963 섬의 개수 python 풀이 (0) | 2023.05.18 |