그래프를 입력받을 때 상어가 있는 위치의 행,열 위치를 큐에 삽입한다.
큐에서 상어의 위치를 하나씩 꺼내면서
주변에 0(아직 탐색하지 않은 물)이 있으면 거리값을 1 증가시키고 그걸 그래프에 저장한 뒤
BFS 탐색을 하는 식으로 문제를 풀었다.
from collections import deque
import sys
input = sys.stdin.readline
def bfs():
while shark:
x,y = shark.popleft()
for i in range(8):
nx = x+dx[i]
ny = y+dy[i]
if 0<=nx<N and 0<=ny<M:
if graph[nx][ny]==0:
shark.append((nx,ny))
graph[nx][ny] = graph[x][y]+1
# 방향벡터
dx = [-1,-1,-1,0,0,1,1,1]
dy = [-1,0,1,-1,1,-1,0,1]
# 그래프의 크기를 입력받음
N,M = map(int,input().split())
graph = []
# 상어의 위치를 저장할 큐
shark = deque()
# 그래프의 정보를 한 줄씩 입력받음
for i in range(N):
tmp = list(map(int,input().split()))
for j in range(M):
# 상어의 위치를 큐에 저장
if tmp[j] == 1:
shark.append((i,j))
# 한줄씩 입력받은 그래프 정보를 이어붙임
graph.append(tmp)
bfs()
# graph는 2차원 리스트이므로 각 행의 최대값들을 구하고
# 그 값들의 최대값을 다시 구한 뒤 -1을 함
print(max(map(max,graph))-1)
'Algorithm > [BOJ] - Python' 카테고리의 다른 글
[백준] 2110 : 공유기 설치 python (0) | 2023.09.23 |
---|---|
[백준] 10816 : 숫자 카드 2 python (1) | 2023.09.22 |
[백준] 1743 : 음식물 피하기 python (0) | 2023.09.10 |
[백준] 7562 : 나이트의 이동 python (0) | 2023.09.10 |
[백준] 18870 : 좌표 압축 python (0) | 2023.08.29 |