본문 바로가기

알고리즘/Baekjoon

최단 경로. [1238]

[1. 문제 설명]

https://www.acmicpc.net/problem/1238


[2. 풀이 접근]

단순하게 생각하면, 각 학생별로 파티가 열리는 곳 까지 다익스트라를 진행한 뒤,

파티가 열린 곳에서 각 학생 집까지 다익스트라를 진행하면 될 것 같은 문제이다.

그러나 이 방법은 다익스트라 알고리즘을 N 번 수행해야 한다.

(=> 대략 O(N*MLogN))

 

여차하면 시간 초과가 발생 할 수 있으며,

플로이드-워셜 사용을 고려 할 경우 역시 시간 초과가 발생 할 수 있다.

(=> O(N3), 이며, N 은 최대 1,000)

 

다익스트라 알고리즘의 아래와 같은 특성을 이용하는 문제이다.

  • 출발지에서 모든 도착지 까지의 최단 경로를 구한다.

각 학생이 있는 마을에서 파티가 열리는 마을까지 최단 경로를 구하는 것이 아니라

목적지인 파티가 열리는 마을에서 출발지 들인 각 학생이 있는 마을까지 역방향으로 다익스트라 알고리즘을 진행하면

총 두번의 다익스트라 알고리즘을 수행하여 정답을 구할 수 있다.

 

역방향 다익스트라 탐색을 수행하기 위해서는 역방향 그래프 역시 필요하다.


[3. 코드]

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

벨만-포드. [1865]  (0) 2022.12.24
분할 정복. [24060]  (0) 2022.12.23
유니온 파인드. [1043]  (0) 2022.12.22
이분탐색. [1939]  (0) 2022.12.22
구간 트리. [10868]  (0) 2022.12.22