https://www.acmicpc.net/problem/7576
시간 1초, 메모리 256MB
input :
output :
조건 :
BFS를 이용해서 토마토를 익게 하는데.
좌표 / 소요한 날짜를 인풋으로 준다.
토마토들이 다 익은 상황이라면 날짜의 변동이 없어 0이 출력되고 그렇지 않다면
날짜가 출력된다.
마지막에 이중반복문을 돌며 현재에 익지 않은 토마토가 있는지 확인 하고 그에 따른 출력을 한다.
import sys
from _collections import deque
m, n = map(int, sys.stdin.readline().split())
graph = []
for i in range(n):
data = list(sys.stdin.readline().split())
graph.append(data)
q = deque()
for i in range(n):
for j in range(m):
if graph[i][j] == '1':
q.append((i, j, 0))
while q:
x, y, day = q.popleft()
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx >= n or nx < 0 or ny >= m or ny < 0:
continue
if graph[nx][ny] == '0':
graph[nx][ny] = '1'
q.append((nx, ny, day + 1))
total = m * n
cnt = 0
for i in range(n):
for j in range(m):
if graph[i][j] == '1':
cnt += 1
elif graph[i][j] == '-1':
total -= 1
if cnt == total:
print(day)
elif cnt < total:
print(-1)