상세 컨텐츠

본문 제목

특정 거리의 도시 찾기

코딩테스트/최단 경로

by 수타. 2023. 6. 2. 19:00

본문

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

문제설명:

대표적인 다익스트라 문제, x으로 부터 거리가 k 인 지점을 찾아라

실버2

소요시간:

16분

 

1차 시도(정답):

#한곳에서 다른곳들 까지 최소거리 다익스트라
import sys
from collections import deque
input = sys.stdin.readline

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

graph = [[] for _ in range(n+1)]
distance = [INF]*(n+1)

for _ in range(m):
	s,e = map(int,input().split())
	graph[s].append((e,1))

q = deque([])
q.append((x,0))
distance[x] = 0 

while q:
	go , dist = q.popleft()
	if dist>distance[go]:
		continue

	for i in graph[go]:
		cost = dist + i[1]
		if cost<distance[i[0]]:
			distance[i[0]] = cost
			q.append((i[0],cost))
piv =1
for i in range(1,n+1):
	if distance[i] == k:
		print(i)
		piv= 0

if piv:
	print(-1)

사실 매번 조금씩 헷갈리긴 한데, 그래도 풀어보면 곧 잘맞춘다. 

비슷한 유형의 어려운 문제들을 풀며 디테일을 확인하자

'코딩테스트 > 최단 경로' 카테고리의 다른 글

운동  (0) 2023.09.15
부대복귀  (0) 2023.07.15
합승 택시 요금  (0) 2023.07.06
정확한 순위  (0) 2023.06.13
플로이드  (0) 2023.06.09

관련글 더보기