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

 

13549번: 숨바꼭질 3

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

www.acmicpc.net

 

 

[난이도] Gold5
[유형] BFS

[풀이]
x2를 하는 연산에는 시간이 들지 않으므로
BFS를 하면서 queue에 넣을 때 x2를 해주면서 도착할 수 있는 모든 지점을
넣어주면 답을 구할 수 있다.

 

#include <cstdio>
#include <queue>
using namespace std;
int N,K;
bool visit[100001];
queue<int> q;
void push(int k){
    while(k<=1e5){
        if(!visit[k]){
            visit[k]=1;
            q.push(k);
        }
        if(k==0) return;
        k*=2;
    }
}
int main(){
    scanf("%d%d",&N,&K);
    push(N);
    int cnt=0;
    while(!q.empty()){
        int sz = q.size();
        while(sz--){
            int cur = q.front(); q.pop();
            if(cur==K){
                printf("%d",cnt);
                return 0;
            }
            int k;
            if(cur+1<=1e5) {
                k=cur+1;
                push(k);
            }
            if(cur-1>=0){
                k=cur-1;
                push(k);
            }
        }
        cnt++;
    }
}


https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/13549.cpp

+ Recent posts