from collections import deque
m, n = map(int, input().split())
tomato = deque()
box = []
visited = [[0]*m for _ in range(n)]
for i in range(n):
b = list(map(int, input().split()))
box.append(b)
for j in range(m):
if b[j]==1:
#tomato가 있는 위치 입려해두기 (x,y,day)
tomato.append((i,j,0))
elif b[j]==-1:
#미리 방문처리
#-1이 여러개 모여 둘러쌓여있는 경우에는 가운데에 있는 -1을 확인할 수 없음
visited[i][j]=1
dx = [0,0,1,-1]
dy = [1,-1,0,0]
result = 0
while tomato:
x, y, day = tomato.popleft()
visited[x][y] = 1
for k in range(4):
nx = x+dx[k]
ny = y+dy[k]
if 0<=nx<n and 0<=ny<m and not visited[nx][ny]:
if box[nx][ny]==0:
box[nx][ny]=1
visited[nx][ny]=1
result = day+1 #result를 day+1가 아닌 +1을 하게 되면 토마토가 익는 만큼 증가하게 됨
tomato.append((nx,ny,day+1))
flag = True
for i in range(n):
for j in range(m):
if not visited[i][j]:
flag = False
break
if not flag: break
#-1은 미리 방문처리 했으므로
#모두 방문처리 됐다면, 모든 토마토가 익을 수 있는 경우를 뜻함
if flag:
print(result)
else:
print(-1)
-1을 어떻게 처리해야하나 고민을 했어서 문제를 다 푼 후에 다른 분의 코드도 살펴보았다.
방문처리하는 visited없이, 익지 않은 토마토를 발견하면 이전 위치값+1을 해주면서 날짜를 하루씩 더해가는 방법이 인상깊었다.