본문 바로가기

알고리즘

[baekjoon] 7569. 토마토


 

코드

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