문제
출처 : www.acmicpc.net/problem/17835
N개의 도시와 도시에따른 M개의 길, K개의 면접장이 주어진다.
승범이네라는 회사에서 신입사원을 뽑을려한다.
N개의 도시에 살고있는 면접 준비자들은 자신의 도시에서 가장 가까운 면접장으로 가야한다.
이때 면접장 까지의 거리가 가장 먼 도시와 그때의 거리를 출력하는 문제다.
(만약 거리가 가장 먼 도시가 여러군데라면 번호가 작은 도시를 출력하면된다.)
풀이
기본적인 다익스트라로 풀리는 문제였다.
도시에서 면접장까지의 거리 = 면접장에서 도시까지의 거리
라고 생각해서 면접장을 시작지점으로해서 다익스트라를 돌렸다.
면접장을 기준으로 다익을 돌리기위해서, K번 면접장의 위치를 입력받을때마다 큐에 {0 , 면접장 인덱스}를 저장해준다.
(큐에는 {면접장에서 지금까지 이동한 거리, 지금 인덱스}와 같이 저장해줬다.)
큐에 저장된 값을 pop해주면서 탐색한다.
면접장에서 지금까지 이동한거리 + 현재 idx에서 다음 idx와 연결된 거리 < 다음 idx에 저장된 거리
가 성립하면 que에 {면접장에서 지금까지 이동한거리 + 현재 idx에서 다음 idx와 연결된 거리, 다음 idx}를 저장해준다.
다익스트라를 수행하고 모든정점을 탐색하면서 면접장이 아니면서 거리가 가장 먼 정점을 찾아주면된다.
다익스트라를 돌릴때 최소힙을 사용하면 시간을 줄일수있다고 알았는데 최소힙을 잘못사용했는지 일반 queue로 했을때 메모리와 시간 둘다 적게걸렸다...
소스코드
'알고리즘 (2020 : 08 : 10 ~ ) > 벨만포드,다익스트라,MST' 카테고리의 다른 글
[백준 / BOJ] 10423 전기가 부족해 (다익스트라) (0) | 2020.09.23 |
---|---|
[백준 / BOJ] 2917 늑대 사냥꾼 (0) | 2020.09.01 |
[백준 / BOJ] 1261 알고스팟 (0) | 2020.08.23 |
[백준 / BOJ] 6118 숨바꼭질 (0) | 2020.08.21 |
[백준 / BOJ] 11657 타임머신 (벨만포드) (0) | 2020.08.12 |