from sys import stdin
from collections import deque
def find():
case = [[-1,0], [1,0], [0,-1], [0,1]]
while q:
x, y = q.popleft()
for i in range(4):
newx, newy = x + case[i][0], y + case[i][1]
# 범위 확인
if 0 <= newx < n and 0 <= newy < m:
# 익지 않은 토마토라면
if graph[newx][newy] == 0:
# 일수 저장
graph[newx][newy] = graph[x][y]+1
q.append([newx, newy])
m, n = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
q = deque()
for i in range(n):
for j in range(m):
# 익은 토마토가 있는 위치를 모두 큐에 먼저 넣음
if graph[i][j] == 1:
q.append([i,j])
# 익은 토마토 기준으로 탐색 시작
find()
res = 0
for i in range(n):
for j in range(m):
# 토마토가 모두 익지 못하는 상황일 때
if graph[i][j] == 0:
print(-1)
exit()
res = max(res, graph[i][j])
print(res-1)
전에 풀어봤던 문제인데, 이번 스터디 문제로 있길래 한번 더 풀어봤다!
이걸 어떻게 맞췄지 하면서 새로운 마음으로(?) 다시 풀어봤다 헤헤
일단, 입력받은 그래프를 탐색하면서 익은 토마토를 큐에 넣어준다!
그리고 그 익은 토마토의 위치를 기준으로, 상하좌우를 탐색하며 아직 익지 않은 토마토들을 익게 만들고, 동시에 일수를 업데이트해준다!
큐가 빌 때 까지 반복하고, 그래프를 한번 더 탐색하는데 만약 그래프에 0 값이 있다면 익지 못한 토마토가 하나라도 있다는 뜻 이므로 -1을 출력하고 종료한다!
그렇지 않으면, 탐색하면서 가장 큰 값을 결과값으로 업데이트하며 출력해준다 😃