알고리즘
[baekjoon] 7569. 토마토
78이
2020. 6. 29. 13:05
코드
import collections
M, N, H = map(int, input().split())
board = [[list(map(int, input().split())) for _ in range(N)] for _ in range(H)]
near = [(0, -1, 0), (0, 1, 0), (1, 0, 0), (-1, 0, 0), (0, 0, 1), (0, 0, -1)]
q = collections.deque()
for i in range(H):
for j in range(N):
for k in range(M):
if board[i][j][k] == 1:
q.append([i, j, k, 0])
while q:
x, y, z, cnt = q.popleft()
for a, b, c in near:
xi, yi, zi = x + a, y + b, z + c
if 0 <= xi < H and 0 <= yi < N and 0 <= zi < M:
if board[xi][yi][zi] == 0:
board[xi][yi][zi] = 1
q.append([xi, yi, zi, cnt+1])
for i in range(H):
for j in range(N):
for k in range(M):
if board[i][j][k] == 0:
cnt = -1
print(cnt)
주의할 점
1. 7576. 토마토와 로직 동일 + z축 추가
2. 이때 조심해야하는게, if 0 <= xi < H and 0 <= yi < N and 0 <= zi < M: 이부분
-> xi : 층수, yi : 행(y), zi : 열(x) 이라는 것 잊지말기!