코드
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) 이라는 것 잊지말기!
'알고리즘' 카테고리의 다른 글
[programmers] 주식가격 (0) | 2020.06.30 |
---|---|
[baekjooon] 5014. 스타트링크 (0) | 2020.06.29 |
[baekjoon] 7576. 토마토 (0) | 2020.06.29 |
[programmers] 크레인 인형뽑기 게임 (0) | 2020.06.27 |
[baekjoon] 2468. 안전 영역 (0) | 2020.06.25 |