inseonyun / Algorithm

알고리즘 문제 풀이
0 stars 0 forks source link

[Djikstra] 백준 : 13549_숨바꼭질3 #36

Closed inseonyun closed 2 years ago

inseonyun commented 2 years ago

Source URL : https://www.acmicpc.net/problem/13549

inseonyun commented 2 years ago

문제 요구사항 :

접근 방법 :

풀이 순서 :

  1. 수빈이의 위치 N과 동생의 위치 K를 입력 받는다.
  2. map의 모든 인덱스의 값을 INF(987654321) 값으로 초기화 한다.
  3. 우선순위 큐 pq를 pair로 생성하여, { 걸린 시간, 정점 } 으로 구성한다. -> 걸린 시간을 first로 둬야 최소 횟수로 우선 탐색하기 때문
  4. pq에 0 (시작 시간), N (초기 수빈이 위치) 값을 넣고, map[N]에 0을 넣어 해당 위치까지 오는데 걸린 시간을 기록 한다.
  5. pq가 빌 때까지 while 문을 반복하여 수행한다.
    • pq의 top()의 첫 번쨰 원소에 -값을 곱해 걸린 시간의 값을 가져온다.
    • pq의 top()의 두 번째 원소 현재 위치 값을 가져온다.
    • pq.pop()
    • 만약 현재 위치까지 걸린 시간이 map[ 현재 위치 ] 값보다 크다면 continue 한다.
    • 수빈이의 이동 방식 중 하나인 순간이동 했을 때의 탐색을 수행한다.
    • 이 때, 최소 시간부터 우선 탐색할 수 있도록, sec에 음수를 취하고 pq에 넣어준다.
    • 수빈이의 이동 방식 중 하나인 걸었을 때의 탐색을 수행한다.
    • 이 때도 마찬가지로, sec에 음수를 취하고 pq에 넣어준다.
  6. 이와 같은 작업 반복
  7. map[ K (동생의 위치) ] 값을 출력
inseonyun commented 2 years ago

[문제 풀이 결과]

image