[Python] 백준 / silver / 18352번 (특정 거리의 도시 찾기)

김상우·2021년 10월 5일
0

문제 링크 : https://www.acmicpc.net/problem/18352

다익스트라 알고리즘을 적용하면 되는 문제이다.
다익스트라 알고리즘은 크게 두 가지 작성법이 있는 것으로 알려져있다.

  1. 리스트 최단거리 테이블 작성 -> O(V^2) time
  2. 힙 최단거리 테이블 작성 -> O(E x logV) time

heapq 라이브러리의 heap 자료구조를 사용해서 문제를 풀어보았다.

정답 코드

import sys
import heapq

INF = 987654321

N, M, K, X = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(N + 1)]
for _ in range(M):
    a, b = map(int, sys.stdin.readline().split())
    graph[a].append(b)

distance = [INF] * (N + 1)


def dijkstra(start):
    distance[start] = 0

    q = []
    heapq.heappush(q, (0, start))

    while q:
        dist, now = heapq.heappop(q)
        if dist > distance[now]: continue  # 방문처리

        for x in graph[now]:
            cost = dist + 1
            if distance[x] > cost:
                distance[x] = cost
                heapq.heappush(q, (cost, x))


dijkstra(X)

check = False
for i in range(1, N+1):
    if distance[i] == K:
        print(i)
        check = True

if not check:
    print(-1)
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글