[Python/파이썬] 백준 7569 - 토마토

문제 설명

 

 

입출력 예제

 


풀이 코드

이 문제는 이전의 7576번 토마토 문제와 유사하지만 3차원 배열을 사용한다는 점이 다르다.

 

[Python/파이썬] 백준 7576 - 토마토

문제 설명 입출력 예제 풀이 코드 처음에는 시작지점의 인덱스 값을 bfs(x, y) 이런식으로 넘겨 탐색하도록 했지만 "예제 입력3"번 케이스에서만 계속 전혀 다른값이 나왔다. 이유는 다음과 같았다

hstory0208.tistory.com

 

3차원 배열을 사용한다는 점과, 6방향(앞,뒤,상,하,좌,우)로 움직인다는 점에 유의하

 

정답 코드
from collections import deque
import sys
input = sys.stdin.readline

m, n, h = map(int, input().split()) # 열, 행, 상자수
boxes = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)]
result = 0
q = deque()

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

def bfs(): 
    while q:
        box, x, y = q.popleft()

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

            if 0 <= nbox < h and 0 <= nx < n and 0 <= ny < m:
                if boxes[nbox][nx][ny] == 0:
                    q.append((nbox, nx, ny))
                    boxes[nbox][nx][ny] = boxes[box][x][y] + 1

for box in range(h):
    for x in range(n):
        for y in range(m):
            if boxes[box][x][y] == 1:
                q.append((box, x, y))

bfs()

for box in boxes:
    for x in box:
        for y in x:
            if y == 0:
                print(-1)
                exit(0)            
        result = max(result, max(x))

print(result-1)