Algorithm/Baekjoon

[Python] 2589. 보물섬

느낌표 공장장 2021. 10. 19. 23:53
from collections import deque

# 상 하 좌 우
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]

def bfs(sy, sx, hour):
    queue = deque([(sy, sx, hour)]) # 시작지점 추가하고 시작
    visited = [[0 for _ in range(garo)] for _ in range(sero)]   # 방문한 곳 다시 방문하지 못하도록 만든 리스트
    visited[sy][sx] = 1  # 시작지점 방문처리
    while queue:
        y, x, hour = queue.popleft()    # 좌표 하나 가져오기
        for i in range(4):
            ny = y + dy[i]
            nx = x + dx[i]
            if 0 <= ny < sero and 0 <= nx < garo:   # 다음 갈 곳이 지도 범위를 벗어나지 않는다면
                if treasure_map[ny][nx] == 'W' or visited[ny][nx]:  # 다음 갈 곳이 바다이거나 방문했던 곳이면 가지않도록
                    continue
                visited[ny][nx] = 1 # 방문처리
                queue.append((ny, nx, hour+1))  # queue에 가볼 곳으로 추가하기
    return hour # 시작지점에서 막다른 곳까지 걸리는 시간 return


sero, garo = map(int, input().split())          # 지도의 세로 길이, 가로 길이
treasure_map = [input() for _ in range(sero)]   # 보물 지도

answer = 0
for h in range(sero):
    gap = 0
    for w in range(garo):
        if treasure_map[h][w] == 'L':   # 해당 좌표 육지이면
            answer = max(answe, bfs(h, w, 0))  # 탐색해보는데, 더 긴 시간으로 갱신

print(answer)

* PYPY로 제출했습니다.

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

[Python] 12015. 가장 긴 증가하는 부분 수열2  (0) 2021.10.21
[Python] 2776. 암기왕  (0) 2021.10.20
[Python] 9205. 맥주마시면서 걸어가기  (0) 2021.10.19
[Python] 2293. 동전 1  (0) 2021.10.02
[Python] 9495. 스티커  (0) 2021.09.30