문제
풀이
- 그래프 탐색 문제이다.
- 인접한 노드(토마토)를 탐색해야 하는 문제이므로
BFS 알고리즘
으로 접근했다.
- 이 문제는 타
DFS/BFS 알고리즘
문제와는 다르게 2중 반목문으로 x, y 위치마다 탐색을 수행하는게 아닌 x, y 위치마다 queue에 데이터를 넣은 뒤, 한번에 탐색을 수행해야 한다.
- 위 조건을 무시하고 탐색을 수행한다면 각각의 시작점에서 탐색이 동시에 발생하는 부분때문에 예제 3번에서 실패가 나게된다.
코드
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1, 0, 0, 1]
dy = [0, -1, 1, 0]
def bfs():
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
if graph[nx][ny] == 0:
graph[nx][ny] = graph[x][y] +1
queue.append((nx, ny))
def solve():
bfs()
result = 0
for tomato in graph:
if 0 in tomato:
return -1
max_ = max(tomato)
result = max(max_, result)
return result - 1
if __name__ == '__main__':
m, n = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
queue = deque()
for x in range(n):
for y in range(m):
if graph[x][y] == 1:
queue.append((x, y))
print(solve())
결과
출처 & 깃허브
BOJ 7576
GITHUB