알고리즘/백준 문제풀이

[boj] 백준 2589 보물섬 python 풀이

감자156 2023. 7. 18. 16:37
반응형

문제

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

 

2589번: 보물섬

첫째 줄에는 보물 지도의 세로의 크기와 가로의 크기가 빈칸을 사이에 두고 주어진다. 이어 L과 W로 표시된 보물 지도가 아래의 예와 같이 주어지며, 각 문자 사이에는 빈 칸이 없다. 보물 지도의

www.acmicpc.net

 

문제 풀이

bfs 문제로, 모든 땅에 대해서 가장 거리가 먼 육지를 bfs로 찾고 최대값을 갱신해가면서 완전탐색 돌리면 된다. 효율적인지는 모르겠음..

 

코드

import sys
input = sys.stdin.readline
import collections

H, W = map(int,input().split())
MAP = [list(input().strip()) for _ in range(H)]
MAX = 0

def bfs(MAP, i , j):
    move = {(-1,0), (0,1), (0,-1), (1,0)}
    visited = [[0 for _ in range(W)] for _ in range(H)]

    q = collections.deque()
    q.append((i,j,0))
    visited[i][j] = 1

    while q:
        x,y,cnt = q.popleft()

        for tx, ty in move:
            nx = x + tx
            ny = y + ty

            if 0<=nx<H and 0<=ny<W and visited[nx][ny] == 0 and MAP[nx][ny] == 'L':
                q.append((nx,ny,cnt+1))
                visited[nx][ny] = 1

    return cnt
    
for i in range(H):
    for j in range(W):
        if MAP[i][j] == 'L': # 가장 멀리 떨어진 곳 탐색 시작
            MAX = max(MAX,bfs(MAP, i, j))

print(MAX)
반응형