✔ 풀이를 위한 아이디어
✔ 코드
import sys
from collections import deque
M, N = map(int, sys.stdin.readline().split())
box = []
for i in range(N):
tmp = list(map(int, sys.stdin.readline().split()))
for t in tmp:
box.append(t)
queue = deque([])
for i in range(N*M):
if box[i] == 1:
queue.append(i)
count = -1
while queue:
n = len(queue)
count += 1
for _ in range(n):
tmp = queue.popleft()
if tmp % M > 0:
if box[tmp-1] == 0:
queue.append(tmp-1)
box[tmp-1] = 1
if (tmp+1) % M > 0:
if box[tmp+1] == 0:
queue.append(tmp+1)
box[tmp+1] = 1
if tmp >= M:
if box[tmp-M] == 0:
queue.append(tmp-M)
box[tmp-M] = 1
if tmp < M*(N-1):
if box[tmp+M] == 0:
queue.append(tmp+M)
box[tmp+M] = 1
tf = 0
for i in range(N*M):
if box[i] == 0:
tf = 1
if tf:
print(-1)
else:
print(count)
살짝 꼰 BFS 문제라 당황했다. 위의 내용 중 2, 3번째 아이디어를 떠올리기가 어려웠다.
✔ 관련 개념