반응형
#include < iostream>
#include < queue>
using namespace std;
int n,k;
bool check[200001];
int dis[200001];
void bfs(){
queue< int> q0;
queue< int> q1;
q0.push(n);
check[n] = true;
dis[n] = 0;
while(!q0.empty()){
int start = q0.front();
q0.pop();
for(int i=0;i<3;i++){
int node;
if(i==0){
node = start*2;
}else if(i==1){
node = start-1;
}else{
node = start+1;
}
if(node<0 || node>200000){
continue;
}
if(check[node] == false){
if(i==0){
q0.push(node);
check[node] = true;
dis[node] = dis[start];
}else{
q1.push(node);
check[node] = true;
dis[node] = dis[start] + 1;
}
}
}
if(q0.empty()){
q0 = q1;
q1 = queue();
}
}
}
int main()
{
cin>>n>>k;
bfs();
cout<<dis[k]<<endl;
return 0;
}
https://www.acmicpc.net/problem/13549
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는
www.acmicpc.net
반응형
'개발자 > 알고리즘' 카테고리의 다른 글
[BOJ] 1748번 수 이어 쓰기1 (0) | 2019.10.13 |
---|---|
[BOJ] 1261번 알고스팟 -deque (0) | 2019.10.12 |
[BOJ] 14226번 이모티콘 (0) | 2019.10.08 |
[BOJ] 1697번 숨바꼭질 (0) | 2019.10.07 |
[BOJ] 2178번 미로탐색 (0) | 2019.09.23 |