https://www.acmicpc.net/problem/12851
[난이도] 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
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold5] 2470 : 두 용액 (C++) (0) | 2021.03.25 |
---|---|
[BOJ/백준][Gold5] 14226 : 이모티콘 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 2636 : 치즈 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 13549 : 숨바꼭질 3 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 17070 : 파이프 옮기기 1 (C++) (0) | 2021.03.25 |