티스토리 뷰

문제출처 - https://www.acmicpc.net/problem/2589

 

2589번: 보물섬

보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 이동은 상하좌우로 이웃한 육지로만 가능하며, 한 칸 이동하는데 한 시간이 걸린다. 보물은 서로 간에 최단 거리로 이동하는데 있어 가장 긴 시간이 걸리는 육지 두 곳에 나뉘어 묻혀있다. 육지를 나타내는 두 곳 사이를 최단 거리로 이동하려면 같은 곳을 두 번 이상 지

www.acmicpc.net

from collections import deque


def bfs(x, y):
    distance = 0
    q = deque()
    q.append((x, y, 0))  # 시작 노드를 큐에 넣어줌
    visit[x][y] = 1

    while q:
        x, y, d = q.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if nx < 0 or ny < 0 or nx >= a or ny >= b:
                continue
            if graph[nx][ny] == 'L' and visit[nx][ny] == 0:
                q.append((nx, ny, d+1))
                visit[nx][ny] = 1
                distance = d+1
    
    return distance


dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
a, b = map(int, input().split())
graph = [input() for _ in range(a)]
visit = [[0] * b for _ in range(a)]
max_distance = 0

for i in range(a):
    for j in range(b):
        if graph[i][j] == 'L':
            visit = [[0] * b for _ in range(a)]  # 매번 초기화 시켜줘야댐
            max_distance = max(max_distance, bfs(i, j))

print(max_distance)

BFS 설명

  1. 큐에 값이 존재하지 않을때까지 반복
  2. 맨 앞에 큐 꺼내서 가져오기
  3. 상하좌우 & 방문 비교
  4. 방문 안했으면 큐에 추가, 방문했다고 표시, 거리 1씩 증가

 

Main

  • 그래프의 모든 원소 탐색
  • 탐색할때마다 매번 방문리스트 초기화
  • 탐색끝나면 max_distance랑 비교해서 큰 값 넣어주기
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함