백준 문제 링크
토마토
- BFS를 사용했다.
- graph에서 익은 토마토의 좌표를 모두 큐에 넣어준다.
- bfs 함수를 만들어 큐가 비어있을 때까지 좌표를 큐에서 빼는데,
좌표가 범위 안에 있고, graph 상에서 좌표가 0인 경우에만graph[nx][ny] = graph[x][y] + 1 queue.append((nx, ny))
- bfs 함수를 실행시킨 후 graph의 원소를 모두 살펴볼건데,
answer = 0으로 지정한다. # 최소 날짜를 알아볼 변수
- 0이 나오면 -1을 출력하고, exit(0)로 프로그램을 종료한다.
- 0이 안나오면 answer를 계속 최대로 갱신해준다.
- 마지막으로 1일부터 시작했으므로 answer - 1 을 출력하면 끝!
from collections import deque
m, n = map(int, input().split())
graph = []
for _ in range(n):
graph.append(list(map(int, input().split())))
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
queue = deque()
for i in range(n):
for j in range(m):
if graph[i][j] == 1:
queue.append((i, j))
visited = [[False] * m for _ in range(n)]
def bfs():
while queue:
x, y = queue.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0 <= nx < n) and (0 <= ny < m) and graph[nx][ny] == 0:
graph[nx][ny] = graph[x][y] + 1
queue.append((nx, ny))
bfs()
answer = 0
for i in range(n):
for j in range(m):
if graph[i][j] == 0:
print(-1)
exit(0)
answer = max(answer, max(graph[i]))
print(answer - 1)