문제.
풀이.
7576 토마토 문제와 3차원 배열인 점만 다르고 똑같다.
3차원 배열의 인덱스가 어떻게 이루어져 있는지 잘 생각하고 BFS에 적용을 하고
입력받은 3차원 배열에서 1의 위치를 큐에 넣고, BFS를 실행한 후 배열에 0이 있으면 -1을 출력하고
0이 없다면 배열의 최댓값에서 -1을 출력을 한다.
소스코드.
import sys
from collections import deque
def BFS():
while queue:
z, x, y = queue.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 matrix[nz][nx][ny] == 0:
matrix[nz][nx][ny] = matrix[z][x][y] + 1
queue.append([nz, nx, ny])
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, 1, -1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
m, n, h = map(int, sys.stdin.readline().split())
matrix, queue = [[] for i in range(h)], deque()
result = 0
for i in range(h):
for j in range(n):
a = list(map(int, sys.stdin.readline().split()))
matrix[i].append(a)
for i in range(h):
for j in range(n):
for l in range(m):
if matrix[i][j][l] == 1:
queue.append([i, j, l])
BFS()
for i in matrix:
for j in i:
if 0 in j:
print(-1)
result = False
break
result = max(result, max(j))
if not result:
break
if result:
print(result-1)
'프로그래밍 > 백준' 카테고리의 다른 글
백준 7562 나이트의 이동 - 파이썬 (0) | 2021.07.22 |
---|---|
백준 1697 숨바꼭질 - 파이썬 (0) | 2021.07.21 |
백준 7576 토마토 - 파이썬 (0) | 2021.07.21 |
백준 1012 유기농 배추 - 파이썬 (0) | 2021.07.20 |
백준 1912 연속합 - 파이썬 (0) | 2021.07.20 |