2589: 보물섬

ewillwin·2023년 7월 13일
0

Problem Solving (BOJ)

목록 보기
120/230

풀이 시간

  • 12m

구현 방법

  • 모든 'L'대해 bfs로 최단거리 중 가장 긴 거리 (local_result)를 각각 구해주고, 최종적으로 result (보물이 묻혀 있는 두 곳 사이를 최단 거리로 이동하는 시간)을 구해줌

코드

import sys
from collections import deque

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

def bfs(x, y):
    global local_result
    queue = deque([])
    queue.append((x, y, 0))
    visit = [[False] * M for _ in range(N)]
    visit[x][y] = True

    while queue:
        x, y, cnt = queue.popleft()
        local_result = max(result, cnt)
        for i in range(4):
            nx = x + dx[i]; ny = y + dy[i]
            if 0 <= nx < N and 0 <= ny < M:
                if board[nx][ny] == 'L' and not visit[nx][ny]:
                    visit[nx][ny] = True
                    queue.append((nx, ny, cnt+1))
    return


N, M = map(int, sys.stdin.readline()[:-1].split())
board = []
for n in range(N):
    board.append(list(sys.stdin.readline()[:-1]))

result = 0
for n in range(N):
    for m in range(M):
        if board[n][m] == 'L':
            local_result = 0
            bfs(n, m)
            result = max(result, local_result)
print(result)

결과

profile
Software Engineer @ LG Electronics

0개의 댓글