danbibibi
article thumbnail

문제

문제 바로가기> BOJ 13549번: 숨바꼭질 3

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

풀이

순간이동을 하는데는 시간이 소요되지 않으므로, 해당 위치에 최단 거리로 도착할 수 있도록, 시간을 업데이트해 줄 필요가 있다!

 

#include<iostream>
#include<queue>
#define MAX 100001
using namespace std;

int N, K;
int visit_time[MAX];

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> N >> K;
    
    int ans = MAX;// 수빈이가 동생을 찾을 수 있는 가장 빠른 시간
    for(int i=0; i<MAX; i++) visit_time[i] = MAX; // 초기화
    
    queue<pair<int, int>> q;
    visit_time[N] = 0;
    q.push({N, 0});

    while(!q.empty()){
        int pos = q.front().first;
        int sec = q.front().second;
        q.pop();

        if(pos == K) ans = min(ans, sec);
        else{
            if(pos*2 < MAX && visit_time[pos*2] > sec){
                visit_time[pos*2] = sec;
                q.push({pos*2, sec});
            }
            
            if(pos+1 <= K && visit_time[pos+1] > sec+1){
                visit_time[pos+1] = sec+1;
                q.push({pos+1, sec+1});
            }

            if(pos-1 >= 0 && visit_time[pos-1] > sec+1){
                visit_time[pos-1] = sec+1;
                q.push({pos-1, sec+1});
            }
        }
    }
    cout << ans;
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 2887번: 행성 터널  (1) 2022.12.22
BOJ 5430번: AC  (0) 2022.12.20
BOJ 1697번: 숨바꼭질  (0) 2022.12.13
BOJ 2294번: 동전 2  (0) 2022.12.09
BOJ 2293번: 동전 1  (0) 2022.12.07
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로