문제.
풀이.
우선 1의 위치를 큐에 넣어주고 BFS를 실행한다.
BFS 실행 후 리스트에 0이 남아있다면 -1을 출력하고 그렇지 않다면
리스트의 최댓값에서 -1을 출력한다.
deque를 사용하지 않고 리스트를 사용해서 제출하면 시간초과가 난다.
소스코드.
import sys
from collections import deque
def BFS():
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if (0 <= nx < n) and (0 <= ny < m):
if matrix[nx][ny] == 0:
matrix[nx][ny] = matrix[x][y] + 1
queue.append([nx, ny])
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
m, n = map(int, sys.stdin.readline().split())
matrix, queue = [], deque()
result = 0
for i in range(n):
a = list(map(int, sys.stdin.readline().split()))
matrix.append(a)
for i in range(n):
for j in range(m):
if matrix[i][j] == 1:
queue.append([i, j])
BFS()
for i in matrix:
if 0 in i:
print(-1)
result = False
break
result = max(result, max(i))
if result:
print(result-1)
'프로그래밍 > 백준' 카테고리의 다른 글
백준 1697 숨바꼭질 - 파이썬 (0) | 2021.07.21 |
---|---|
백준 7569 토마토 - 파이썬 (0) | 2021.07.21 |
백준 1012 유기농 배추 - 파이썬 (0) | 2021.07.20 |
백준 1912 연속합 - 파이썬 (0) | 2021.07.20 |
백준 2565 전깃줄 - 파이썬 (0) | 2021.07.19 |