백준 7569번 바로가기
나의 풀이#
from collections import deque
# 입력
m,n,h=map(int,input().split())
tomato = []
for i in range(h):
tomato.append([list(map(int,input().split())) for _ in range(n)])
queue = deque([])
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]
# 처리
for i in range(h):
for j in range(n):
for k in range(m):
if tomato[i][j][k] == 1:
queue.append([i,j,k])
def ripe():
while queue:
x,y,z = queue.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0<=nx<h and 0<=ny<n and 0<=nz<m and tomato[nx][ny][nz] == 0:
tomato[nx][ny][nz] = tomato[x][y][z] + 1
queue.append([nx,ny,nz])
ripe()
ans = 0
for t1 in tomato:
for t2 in t1:
for t3 in t2:
if t3 == 0:
print(-1)
exit(0)
ans = max(ans ,max(t2))
print(ans-1)
CODE REVIEW#
- 7569번 토마토의 3차원 버전. 기본 원리는 동일해서 조금만 수정하면 금세 구현할 수 있다.
- 이 문제도 마지막에 3차원 array에서 최댓값을 구하는 과정이 까다로웠는데, 3차원은 한번에 최댓값을 구할 수 없다.
ans = max(ans,max(t2))
와 같이 3차원 배열을 2차원들로 쪼개서 각각의 max값을 비교해서 더 큰 값으로 업데이트 하는 방법으로 구할 수 있다.