728x90
반응형
https://www.acmicpc.net/problem/7569
이번엔 3차원 배열에서의 토마토이다. 전 버전과 다른 곳은
dx = [1, 0, -1, 0, 0, 0]
dy = [0, 1, 0, -1, 0 ,0]
dz = [0, 0, 0, 0, 1, -1]
이 부분을 제외하면 똑같은 코드이다. 아래는 전에 푼거에다가 3차원 리스트로 만든뒤 제작한 코드이다.
from collections import deque
m, n, h = map(int, input().split())
box = []
for _ in range(h):
arr = []
for i in range(n):
arr.append(list(map(int, input().split())))
box.append(arr)
cnt = 0
for z in range(h):
for i in range(n):
for j in range(m):
if box[z][i][j] == 0:
cnt+=1
if cnt == 0:
print(0)
exit()
dq = deque()
dx = [1, 0, -1, 0, 0, 0]
dy = [0, 1, 0, -1, 0 ,0]
dz = [0, 0, 0, 0, 1, -1]
s = 0
for z in range(h):
for i in range(n):
for j in range(m):
if box[z][i][j] == 1:
dq.append((z, i, j))
while dq:
z, x, y = dq.popleft()
for k in range(6):
nx = dx[k] + x
ny = dy[k] + y
nz = dz[k] + z
if 0<=nx<n and 0<=ny<m and 0<=nz<h:
if box[nz][nx][ny] == 0:
box[nz][nx][ny] = box[z][x][y] + 1
dq.append((nz, nx, ny))
high = 0
for z in range(h):
for i in range(n):
for j in range(m):
if box[z][i][j] == 0:
print(-1)
exit()
high = max(high, box[z][i][j]) # 최대값을 갱신하는 방식으로 변경
# 모든 토마토가 익는 데 걸리는 최소 일수를 출력할 때, 초기값 1을 고려하여 1을 빼준다.
print(high-1) # 모든 토마토가 익는 데 필요한 최소 일수 계산 시, 1을 빼줌
완성
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준] 11723번: 집합 - python (0) | 2024.04.04 |
---|---|
[백준] 1620번: 나는야 포켓몬 마스터 이다솜 - python (0) | 2024.04.04 |
[백준] 6359번: 만취한 성범 - python (0) | 2024.04.03 |
[백준] 10844번: 쉬운 계단 수 - python (0) | 2024.04.03 |
[백준] 1932번: 정수 삼각형 - python (0) | 2024.04.02 |