728x90
import sys
from collections import deque
m, n, h = map(int, sys.stdin.readline().split())
q = deque()
graph = [ [list(map(int, sys.stdin.readline().split())) for _ in range(n) ] for _ in range(h) ] #1
dx = [ -1, 1, 0, 0, 0, 0 ] #2
dy = [ 0, 0, -1, 1, 0, 0 ]
dz = [ 0, 0, 0, 0, -1, 1 ]
for i in range(h): #3
for j in range(n):
for k in range(m):
if graph[i][j][k] == 1:
q.append((i, j, k))
def bfs():
while q:
z, x, y = q.popleft()
for i in range(6): #4
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0 <= nz < h and 0 <= nx < n and 0 <= ny < m and graph[nz][nx][ny] == 0: #5
q.append((nz, nx, ny))
graph[nz][nx][ny] = graph[z][x][y] + 1
res = 0
bfs()
for i in range(h):
for j in range(n):
for k in range(m):
if graph[i][j][k] == 0: #6
print(-1)
exit(0)
res = max(res, graph[i][j][k]) #7
print(res-1)
m, n, h은 순서대로 가로, 세로, 높이이다.
#1 : 3차원 배열 만들기
#2 : 3차원 배열이니까 방향도 3가지로 생성
#3 : z축인 높이부터 시작해서 graph[i][j][k] == 1인것 큐에 저장
#4 : 6번 반복
#5 : graph[nz][nx][ny] == 0 이고 범위안
#6 : 높이, 세로, 가로
#7 : 모든 원소가 1과 -1이어도 print(res-1)이기 때문에 0을 출력할 수 있다.
3차원 배열을 이용한 bfs문제인데 이해하기 정말 어려웠다. 2차원을 끝내고 나니 바로 3차원이 등장해서 다시 한번 벽을 느끼는것 같다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 7562 파이썬(python) : 나이트의 이동 (0) | 2022.06.30 |
---|---|
[백준] 1697 파이썬(python) : 숨바꼭질 - (★) (0) | 2022.06.30 |
[백준] 7576 파이썬(python) : 토마토 - (★) (0) | 2022.06.30 |
[백준] 1012 파이썬(python) : 유기농 배추 (0) | 2022.06.30 |
[백준] 2667 파이썬(python) : 단지번호붙이기 - (★) (0) | 2022.06.29 |