본문 바로가기

Algorithm/Shortest Way

숨바꼭질

 

 

문제 유형 분석 및 구현

이 문제도 결과적으로 봐야한다.

결과적으로 한 노드에서 어떠한 노드로 가는데 가장 멀리있는 노드들 중에 번호가 작은 노드를 출력하는 문제이다.

처음에는 헷갈렸던 적도 있는 것 같다. 모든 노드와 노드사이의 최단 경로를 구해야하나라고 생각했다.

하지만 최단경로 문제들은 결과적으로 생각해야 한다.

결과적으로 1번 헛간과 가장 먼 거리를 찾는 경우이므로 다익스트라 알고리즘을 이용한다.

 

주의할 점은 양방향 통로라는 점이다. 따라서 입력받을 때, 두 노드 모두 경로 처리해야한다.

 

 

코드

import heapq
n, m = map(int, input().split())
INF = int(1e9)
graph = [[] for _ in range(n+1)]
for i in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

start = 1
distance = [INF]*(n+1)
distance[start] = 0
q = []
heapq.heappush(q, [0, start])

max_value = 0
while q:
    dist, now = heapq.heappop(q)
    max_value = max(max_value, dist)
    if distance[now] < dist:
        continue
    for next in graph[now]:
        cost = dist+1
        if distance[next] > cost:
            distance[next] = cost
            heapq.heappush(q, [cost, next])


count = []
for i in range(len(distance)):
    if distance[i] == max_value:
        count.append(i)
print(min(count), max_value, len(count))

'Algorithm > Shortest Way' 카테고리의 다른 글

화성 탐사  (0) 2023.04.13
정확한 순위  (0) 2023.04.13
플로이드  (0) 2023.04.12
전보  (0) 2023.04.12
미래 도시  (0) 2023.04.12