코드
import collections
N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(M)]
near = [(0, -1), (0, 1), (1, 0), (-1, 0)]
q = collections.deque() # 그냥 q로하니까 시간초과 떠서 deque로 수정
for i in range(M):
for j in range(N):
if board[i][j] == 1:
q.append((i, j, 0))
board[i][j] = 2
while q:
x, y, cnt = q.popleft()
for a, b in near:
xi, yi = x + a, y + b
if 0 <= xi < M and 0 <= yi < N and board[xi][yi] == 0:
# cnt += 1 해버리면,, q가 완전히 다 돌때마다 1이 더해져야하는데, q하나 빠질 때마다 다 더해짐,,
# -> 해결책 : cnt를 들고다녀라.
board[xi][yi] = 2
q.append((xi, yi, cnt + 1))
for i in range(M):
for j in range(N):
if board[i][j] == 0:
cnt = -1
break
print(cnt)
주의할 점
1. q = [] 하니까 시간초과 -> q = collection.deque()하니까 통과!
2. cnt += 1하니까 q가 완전히 다 돌때마다 1이 더해져야하는데, q하나 빠질 때마다 다 더해짐,,
-> 해결책 : cnt를 q에 들고다녀라.
'알고리즘' 카테고리의 다른 글
[baekjooon] 5014. 스타트링크 (0) | 2020.06.29 |
---|---|
[baekjoon] 7569. 토마토 (0) | 2020.06.29 |
[programmers] 크레인 인형뽑기 게임 (0) | 2020.06.27 |
[baekjoon] 2468. 안전 영역 (0) | 2020.06.25 |
[baekjoon] 2667. 단지 내 수 세기 (0) | 2020.06.25 |