알고리즘

<백준> 7576번 파이썬 알고리즘

changha. 2021. 1. 8. 15:39

www.acmicpc.net/problem/7576

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net

 

 

from collections import deque

m, n = map(int,input().split())
array = []
for i in range(n):
  array.append(list(map(int,input().split())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

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 array[nx][ny] == 0:
          array[nx][ny] = array[x][y] + 1
          queue.append((nx,ny))

queue = deque()
for i in range(n):
  for j in range(m):
    if array[i][j] == 1:
      queue.append((i,j))
bfs()
isTrue = False
result = -2
for i in array:
    for j in i:
        if j == 0:
            isTrue = True
        result = max(result, j)
if isTrue == True:
    print(-1)
## -1 밖에 없을 때
elif result == -1:
    print(0)
# 1 만 있는 경우 0이 만들어 짐
else:
    print(result - 1)

 

주석 부분이 많이 헷갈렸다. 문제와 정확히 대조하면서 읽기