- 문제 : https://www.acmicpc.net/problem/7569

 

- 정답 풀이 : 

이전에 풀었던 토마토와 풀이는 비슷한데, 3중 행렬이라 약간 다르다. 

이거는 리스트 하나만 더 추가한 뒤 그거에 맞춰서 진행해주면 된다 

스스로 푼 문제!! Gold Level 5 문제다 

 

from collections import deque
import sys
input=sys.stdin.readline

n,m,h=map(int,input().split())
data=[[] for _ in range(h)]
tomato=deque()
flag=False

for i in range(h):
    for j in range(m):
        data[i].append(list(map(int,input().split())))
        for k in range(n):
            if data[i][j][k]==1:
                tomato.append((i,j,k))
            if data[i][j][k]==0:
                flag=True
                
direct=[[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]]                

def bfs():
    while tomato:
        a,b,c=tomato.popleft()
        for i in range(6):
            na,nb,nc=a+direct[i][0],b+direct[i][1],c+direct[i][2]
            if 0<=na<h and 0<=nb<m and 0<=nc<n:
                if data[na][nb][nc]==0:                   
                    data[na][nb][nc]=data[a][b][c]+1
                    tomato.append((na,nb,nc))
bfs()

if not flag:
    print(0)
else: 
    minNum,maxNum=10**9,0
    for i in range(h):
        for j in range(m):
            if 0 in data[i][j]:
                minNum=0                
            else: 
                maxNum=max(max(data[i][j]),maxNum)
    if minNum==0:
        print(-1)
    else:
        print(maxNum-1)

 

+ Recent posts