티스토리 뷰

알고리즘 공부/백준

백준 17086번

_Yunhwan 2022. 10. 29. 00:48

https://www.acmicpc.net/problem/17086

 

17086번: 아기 상어 2

첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸과 상어의 수가 각각 한 개 이상인 입력만

www.acmicpc.net

from collections import deque

n, m = map(int,input().split())

g = [list(map(int,input().split())) for _ in range(n)]

#8방향
way = [[-1,-1],[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1]]

ans = 0
#큐 생성
q = deque()

def bfs():
  
  while q:
    
    x,y= q.popleft()
    # 8방향으로 탐색
    for i in range(len(way)):
      nx = x + way[i][0]
      ny = y + way[i][1]

      # 이동할 수 있는 경우
      if n>nx>=0 and m>ny>=0:
        # 방문한 적 없는 경우 
        if g[nx][ny]==0:
          #큐에 추가
          q.append((nx,ny))
          #기존거리에서 1더해주기
          g[nx][ny] = g[x][y]+1

          
for i in range(n):
  for j in range(m):
    # 상어가 있는 곳을 큐에 추가
    if g[i][j]==1:
        q.append([i,j])

bfs()

#그래프에서 가장 큰 값 - 1
print(max(map(max,g))-1)

 

 

  1. 상어가 위치한 곳을 큐에 추가
  2. bfs를 이용하여 상어가 위치한 곳부터 8방향 으로 탐색
  3. 이동할 수 있고 방문 한 적이 없는 위치면 기존 거리에서 1을 더해 큐에 추가
  4. 그래프에서 가장 큰 값에서 초기 값 1을 빼준 것이 정답

'알고리즘 공부 > 백준' 카테고리의 다른 글

백준 1456번  (0) 2022.10.29
백준 1189번  (0) 2022.10.29
백준 1062번  (0) 2022.10.27
백준 1806번  (0) 2022.10.27
백준 17070번  (0) 2022.10.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함