이전 포스팅했던 토마토 문제와 맥락은 똑같다. 상자에 토마토가 없는 칸이 있을 수 있으며 인접한 곳에 영향을 준다. 살짝의 차이는 위 아래가 추가 되었다.
구현은 아래와 같다.
from collections import deque
nx = [-1,1,0,0,0,0]
ny = [0,0,-1,1,0,0]
nh = [0,0,0,0,1,-1] # nx와 ny가 움직임이 0일때 위아래로 움직일 수 있음.
q = deque([])
m,n,h = map(int, input().split())
arr = [[] for _ in range(h)]
for i in range (h):
for j in range(n):
tmp = list(map(int,input().split()))
arr[i].append(tmp)
for i in range(h):
for j in range(n):
for k in range(m):
if arr[i][j][k] == 1:
q.append([i,j,k])
def bfs():
while q:
h1,y1,x1 = q.popleft()
for tmp in range(6):
dx = nx[tmp] + x1
dy = ny[tmp] + y1
dh = nh[tmp] + h1
if 0<=dx<m and 0<=dy<n and 0<=dh<h and arr[dh][dy][dx] == 0:
arr[dh][dy][dx] = arr[h1][y1][x1] + 1
q.append([dh,dy,dx])
bfs()
count = 0
flag = True
for i in range(h):
for j in range(n):
for k in arr[i][j]:
if k == 0:
flag = False
break
count = max(k,count)
if flag == False:
print(-1)
else:
print(count-1)
문제를 풀면서 살짝 꼬였던 것은 실수로 움직일 수 있는 배열의 크기를 5로 만들어서 정보가 하나가 빠졌었다. 이거를 발견하지 못해서 계산이 갱신된 값을 보면서 의문만을 가져었다.
[BOJ / 백준 20040번][PYTHON] 사이클 게임 (유니온 파인드) (2) | 2025.02.08 |
---|---|
[BOJ / 백준 4195번][PYTHON] 친구 네트워크 (유니온 파인드) (0) | 2025.02.08 |
[BOJ / 백준 7576번][PYTHON] 토마토 - (BFS) (1) | 2025.02.05 |
[BOJ / 백준 1976번][PYTHON] 여행 가자 (유니온 파인드) (2) | 2025.02.05 |
[BOJ/백준 1717번][PYTHON] 집합의 표현 (유니온 파인드) (0) | 2025.02.05 |