본문 바로가기
코딩테스트

[백준][파이썬]18352번: 특정 거리의 도시 찾기

by 과아아앙 2021. 5. 18.

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

 

18352번: 특정 거리의 도시 찾기

첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개

www.acmicpc.net

내 풀이

import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)

n, m, k, x = map(int, input().split())

graph = [[] for i in range(n + 1)]

distance = [INF] * (n + 1)

check = -1

for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)

def dijkstra(start):
    q = []

    heapq.heappush(q, (0, start))
    distance[start] = 0
    while q:
        dist, now = heapq.heappop(q)

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

for i in range(1, n + 1):
    if distance[i] == k:
        print(i)
        check = 1
if check == -1:
    print(check)

설명

다익스트라 최단 거리 문제이다.

반복문을 돌면서 위치값과 거리를 갱신해가며 지정한 시작점에서부터 갈 수 있는 모든 경로에 최단 거리를 집어넣는다.