[python 파이썬] 백준 7569번 토마토

2021. 3. 15. 01:34Algorithm/BOJ

반응형

www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

 

7576번 토마토와 비슷한문젠데 z축을 추가해서 풀면된다.

 

 

from collections import deque

m, n, h = map(int, input().split())
a = [[list(map(int, input().split())) for i in range(n)] for depth in range(h)]

dx = [-1, 0, 1, 0, 0, 0]
dy = [0, 1, 0, -1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]


def bfs():
    while de:
        z, x, y = de.popleft()

        for i in range(6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]

            if 0 <= nx < n and 0 <= ny < m and 0 <= nz < h:
                if a[nz][nx][ny] == 0:
                    a[nz][nx][ny] = a[z][x][y] + 1
                    de.append([nz, nx, ny])


de = deque()
for i in range(h):
    for j in range(n):
        for k in range(m):
            if a[i][j][k] == 1:
                de.append([i, j, k])

bfs()

z = 1
result = -1

for i in a:
    for j in i:
        for k in j:
            if k == 0:
                z = 0

            result = max(result, k)

if z == 0:  # 모두 익지 못한 상태
    print(-1)
elif result == 1:  # 모두 익어있던 상태
    print(0)
else:
    print(result - 1)

 

 

참고

chldkato.tistory.com/10

반응형