https://www.acmicpc.net/problem/7576
while queue:
x, y, day = queue.pop()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < M and 0 <= ny < N and array[ny][nx] == 0:
array[ny][nx] = 1
queue.appendleft((nx, ny, day + 1))
else:
pass
import sys
from collections import deque
input = sys.stdin.readline
def BFS(array):
global day
while queue:
x, y, day = queue.pop()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < M and 0 <= ny < N and array[ny][nx] == 0:
array[ny][nx] = 1
queue.appendleft((nx, ny, day + 1))
else:
pass
for i in array:
for s in i:
if s == 0:
return -1
return day
M, N = map(int, input().split())
container = []
for i in range(N):
container.append(list(map(int, input().split())))
dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]
day = 0
queue = deque([])
for i in range(N):
for s in range(M):
if container[i][s] == 1:
queue.appendleft((s, i, day))
answer = BFS(container)
print(answer)
이중 for문을 빠져나올 땐 함수의 return을 이용하는 것이 편리하다.
이전에는 sys.exit()을 사용해서 빠져나오려 했었다(프로그램 자체를 종료시켜버리는 것이라 오류가 발생할 수도 있다,,)