🍎 [백준 7569] 토마토
문제 링크
⚾ 코드
from collections import deque
M, N, H = map(int, input().split())
grid = [[] for _ in range(H)]
for i in range(H):
for _ in range(N):
grid[i].append(list(map(int, input().split())))
q = deque()
dh = [0, 0, 0, 0, 1, -1]
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
def check_range(h, x, y):
if x >= 0 and x < N and y >= 0 and y < M and h >= 0 and h < H:
return True
return False
def bfs():
while q:
h, x, y = q.popleft()
for i in range(6):
nh = h+dh[i]
nx = x+dx[i]
ny = y+dy[i]
if check_range(nh, nx, ny) and grid[nh][nx][ny] == 0:
grid[nh][nx][ny] = grid[h][x][y]+1
q.append([nh, nx, ny])
for h in range(H):
for i in range(N):
for j in range(M):
if grid[h][i][j] == 1:
q.append([h, i, j])
bfs()
answer = 0
mark = True
for i in range(H):
for j in range(N):
if 0 in grid[i][j]:
mark = False
break
answer = max(answer, max(grid[i][j]))
if mark:
print(answer-1)
else:
print(-1)
🔔 해결과정 & 깨달은 점
- BFS의 아이디어를 활용해 풀었다.
- 바로 전에 푼 토마토 문제의 3D 버전이라서 위 아래 탐색하는 코드만 조금 추가해주었다.