알고리즘/문제풀이
[Python] 백준 17086 아기 상어 2
정찡이
2021. 10. 30. 00:17
728x90
1. 문제 링크
https://www.acmicpc.net/problem/17086
17086번: 아기 상어 2
첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸의 개수가 한 개 이상인 입력만 주어진다.
www.acmicpc.net
2. 문제 요약
- 안전거리 최댓값 구하기

3. 아이디어 정리
- bfs 탐색을 통해 최단 거리 구하기
4. 문제 풀이
4-1. 내 풀이
import sys
from collections import deque
dx = [-1, -1, -1, 0, 1, 0, 1, 1]
dy = [-1, 0, 1, 1, 1, -1, 0, -1]
n, m = map(int, sys.stdin.readline().split())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
dq = deque()
for i in range(n):
for j in range(m):
if graph[i][j] == 1: # 상어가 있는 위치에서 탐색하기 위해
dq.append([i, j])
result = 0
# 상어 있는 위치 기준으로 최단 거리 구하기
while dq:
x, y = dq.popleft()
for d in range(8):
nx = x + dx[d]
ny = y + dy[d]
if nx < 0 or ny < 0 or nx >= n or ny >= m:
continue
if graph[nx][ny] != 0:
continue
dq.append([nx, ny])
graph[nx][ny] = graph[x][y] + 1
result = max(result, graph[x][y] + 1)
print(result - 1)
5. 결론
- bfs 문제 중 최단거리 구하기와 동일한 문제
반응형