[파이썬/python] 백준 - 17086 아기 상어 2

2025. 7. 14. 14:17·알고리즘
반응형

문제

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


문제 설명

  1. N*M 크기의 공간에 아기 상어 여러 마리가 있다.
  2. 안전거리는 현재 칸에서 아기 상어와 가장 가까운 거리를 말한다.
  3. 인접한 8방향으로 이동이 가능하다.
  4. 이 때 모든 칸을 기준으로 안전거리의 최댓값을 구한다.

 


풀이

단순 BFS 문제이다. 매 위치를 갱신하면서 다음 위치가 현재 위치 + 1 거리보다 크다면 갱신하도록 탐색했다.

  1. 배열을 완전 탐색하여 상어의 위치를 전부 queue에 넣는다.
  2. BFS을 진행한다.
    1. 만약 현재 위치 (y,x)에서 1을 더한 크기가 (ny,nx)의 안전거리보다 더 작다면 갱신한다.
    2. max_dist를 통해 갱신될 때 마다 최댓값을 갱신한다.
  3. 결과를 출력한다. 

 


코드

import sys
from collections import deque
input = sys.stdin.readline
INF = sys.maxsize

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

board = [list(map(int,input().split())) for _ in range(n)]
visited = [[INF for _ in range(m)] for _ in range(n)]
queue = deque([])

for y in range(n):
    for x in range(m):
        if board[y][x]:
            queue.append((y,x))
            visited[y][x] = 0

dy = [0,1,0,-1,1,1,-1,-1]
dx = [1,0,-1,0,1,-1,1,-1]

def bfs():
    max_dist = 0
    while queue:
        y,x = queue.popleft()
        
        for i in range(8):
            ny = y + dy[i]
            nx = x + dx[i]
            if ny < 0 or ny > n-1 or nx < 0 or nx > m-1:
                continue
            if  visited[y][x] + 1 < visited[ny][nx]:
                visited[ny][nx] = visited[y][x] + 1
                queue.append((ny,nx))
                max_dist = max(max_dist,visited[ny][nx])
    return max_dist

print(bfs())

시간복잡도

  • BFS의 시간복잡도는 $O(N*M)$이다.
  • N,M은 최대 50이므로, 약 $O(50*50) = O(10^3)$의 시간복잡도가 소요된다.
반응형

'알고리즘' 카테고리의 다른 글

[파이썬/python] 백준 - 20057 마법사 상어와 토네이도  (0) 2025.07.16
[파이썬/python] 백준 - 20056 마법사 상어와 파이어볼  (1) 2025.07.15
[파이썬/python] 백준 - 19237 어른 상어  (0) 2025.07.13
[파이썬/python] 백준 - 12764 싸지방에 간 준하  (1) 2025.07.12
[파이썬/python] 백준 - 2637 장난감 조립  (1) 2025.07.11
'알고리즘' 카테고리의 다른 글
  • [파이썬/python] 백준 - 20057 마법사 상어와 토네이도
  • [파이썬/python] 백준 - 20056 마법사 상어와 파이어볼
  • [파이썬/python] 백준 - 19237 어른 상어
  • [파이썬/python] 백준 - 12764 싸지방에 간 준하
개골개굴
개골개굴
굶고 코딩하기
  • 개골개굴
    밥스토리
    개골개굴
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (144)
      • 알고리즘 (124)
      • Java (2)
      • 자기개발 (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    async
    completablefuture
    작심삼일 챌린지
    OS
    인프런
    java
    python
    백준
    springboot
    Redis
    컴퓨터 구조
    파이썬
    SMTP
    컴퓨터구조
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
개골개굴
[파이썬/python] 백준 - 17086 아기 상어 2
상단으로

티스토리툴바