본문 바로가기
Algorithm/baekjoon

baekjoon 2589: 보물섬

by 갈잃자 2022. 4. 26.

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

 

2589번: 보물섬

보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서

www.acmicpc.net


bfs와 브루스포스 알고리즘으로 한칸씩 육지를 밟을때 시간을 체크해준다.

하나의 섬(?)에서 최단거리측정하는 방식으로 최대거리를 구하면 된다. #문제에 설명이 잘 되어있습니다ㅎㅎ.

그렇다면 코드는

from collections import deque
n, m = list(map(int,input().split()))
arr = [list(input())for _ in range(n)]
lst = [[0]*m for _ in range(n)]
result = 0
Max = -21e8
def bfs(y,x):
    global Max, cnt
    q = deque()
    q.append((y,x))
    directy = [-1,1,0,0]
    directx = [0,0,-1,1]

    while q:
        nowy,nowx = q.popleft()

        for i in range(4):
            dy = directy[i] + nowy
            dx = directx[i] + nowx

            if 0 <= dy < n and 0 <= dx < m and lst[dy][dx] == 0 and arr[dy][dx] != "W":

                lst[dy][dx] = lst[nowy][nowx] + 1
                Max = max(lst[dy][dx],Max)
                q.append((dy,dx))
    return Max

for i in range(n):
    for j in range(m):
        if arr[i][j] == 'L':
            lst = [[0] * m for _ in range(n)]
            arr[i][j] = 0
            lst[i][j] = 1
            result = max(result,bfs(i,j))
print(result-1)

가 된다!

'Algorithm > baekjoon' 카테고리의 다른 글

beakjoon 16500: 문자열 판별  (0) 2022.06.14
backjoon 11055: 가장 큰 증가 부분 수열  (0) 2022.05.19
backjoon 2469: 사다리 타기  (0) 2022.05.17
baekjoon 14606: 피자(small)  (0) 2022.05.17
baekjoon 2468: 안전영역  (0) 2022.04.16

댓글