문제 설명
https://www.acmicpc.net/problem/7569
문제 풀이
높이까지 있는 BFS문제다.
dx, dy, dh로 각각 이동하는 범위를 설정하고
queue를 돌면서 확인해줬다-!
from collections import deque
M, N, H = list(map(int, input().split()))
tomato = [[list(map(int, input().split())) for _ in range(N)] for __ in range(H)]
dx = [0, 0, 1, -1, 0, 0]
dy = [0, 0, 0, 0, 1, -1]
dh = [1, -1, 0, 0, 0, 0]
result = 0
def bfs():
while queue:
x, y, h = queue.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nh = h + dh[i]
if 0 <= nx < M and 0 <= ny < N and 0 <= nh < H:
if tomato[nh][ny][nx] == 0:
queue.append((nx, ny, nh))
tomato[nh][ny][nx] = tomato[h][y][x] + 1
return
queue = deque()
for i in range(H):
for j in range(N):
for k in range(M):
if tomato[i][j][k] == 1:
queue.append((k, j, i))
bfs()
for i in range(H):
for j in range(N):
if 0 in tomato[i][j]:
print(-1)
exit(0)
result = max(max(tomato[i][j]), result)
print(result - 1)
'알고리즘 > 백준' 카테고리의 다른 글
[백준`S1] 14888 - 연산자 끼워넣기 (Python) (2) | 2024.03.22 |
---|---|
[백준`G4] 2636 - 치즈 (Python) (2) | 2024.03.14 |
[백준`G5] 13023 - ABCDE (Python) (1) | 2024.03.08 |
[백준`S1] 1932 - 정수 삼각형 (Python) (0) | 2024.03.06 |
[백준`G5] 14503 - 로봇 청소기 (Python) (1) | 2024.03.05 |