Leta Learns

[Python] 백준 2589번 - 보물섬 본문

Coding/백준

[Python] 백준 2589번 - 보물섬

leta 2022. 2. 6. 12:19

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

 

2589번: 보물섬

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

www.acmicpc.net

 

bfs 풀 때 visited 배열 안 쓰고 푸는 게 편하길래 이 문제도 그렇게 접근했는데 잘 안 풀려서 결국 visited 배열을 사용하였다.

모든 L에 대해서 bfs 탐색을 시도해야 해서 시간초과 날까봐 코드 짤 때부터 걱정했는데 역시나였다.

pypy3로 제출해서 성공하였다.

 

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

def bfs(y, x):
    q = deque()
    visited = [[0 for _ in range(m)] for _ in range(n)]
    visited[y][x] = 1
    q.append((y, x))
    time = 0
    while q:
        y, x = q.popleft()
        dxdy = [(-1, 0), (1, 0), (0, -1), (0, 1)]
        for dy, dx in dxdy:
            nx = x + dx
            ny = y + dy
            if -1 < nx < m and -1 < ny < n:
                if tsmap[ny][nx] == 'L' and visited[ny][nx] == 0:
                    visited[ny][nx] = visited[y][x] + 1
                    q.append((ny, nx))
                    time = max(time, visited[ny][nx])
    return time - 1
    
n, m = map(int, input().split()) #n: 세로(y), m: 가로(x)
tsmap = []
ans = 0
for _ in range(n):
    tsmap.append(list(map(str, input().strip())))

for i in range(n):
    for j in range(m):
        if tsmap[i][j] == 'L':
            ans = max(ans, bfs(i, j))

print(ans)

 

Comments