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

 

12851번: 숨바꼭질 2

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

www.acmicpc.net

 

 

[난이도] Gold5
[유형] BFS

[풀이]
모든 가능한 경우를 구해야 하므로 단순 특정 점에 방문했는지 유무만 기록하면 안되고
몇 초만에 처음 방문했는지를 기록해놔야 모든 경우에 대해 구할 수 있다. (dist[nxt] = dist[cur]+1 과 같이..)

 

#include <cstdio>
#include <queue>
using namespace std;
int N,K,visit[100001];
int main(){
    scanf("%d%d",&N,&K);

    queue<int> q;
    q.push(N);
    int t=0,ans=0;
    while(!q.empty()){
       
        int sz=q.size();   
        while(sz--){
            int cur=q.front(); q.pop();
            if(cur==K) ans++;
            
            for(auto nxt : {cur-1,cur+1,cur*2}){
                if(nxt<0 || nxt>1e5) continue;
                if(!visit[nxt] || visit[nxt]==visit[cur]+1){
                    visit[nxt]=visit[cur]+1;
                    q.push(nxt);
                }
            }
        }
        if(ans>0) break;
        t++;
    }
    printf("%d\n%d",t,ans);
}


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

+ Recent posts