BOJ - 7576

주의·2024년 2월 7일
0

boj

목록 보기
197/214

백준 문제 링크
토마토

❓접근법

  1. BFS를 사용했다.
  2. graph에서 익은 토마토의 좌표를 모두 큐에 넣어준다.
  3. bfs 함수를 만들어 큐가 비어있을 때까지 좌표를 큐에서 빼는데,
    좌표가 범위 안에 있고, graph 상에서 좌표가 0인 경우에만
graph[nx][ny] = graph[x][y] + 1
queue.append((nx, ny))
  1. bfs 함수를 실행시킨 후 graph의 원소를 모두 살펴볼건데,
    answer = 0으로 지정한다. # 최소 날짜를 알아볼 변수
  • 0이 나오면 -1을 출력하고, exit(0)로 프로그램을 종료한다.
  • 0이 안나오면 answer를 계속 최대로 갱신해준다.
  1. 마지막으로 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)

0개의 댓글