알고리즘/백준(BOJ)
[백준/C++] 1697번 숨바꼭질
beomseok99
2022. 11. 15. 01:32
728x90
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
간단한 bfs문제이다.
큐에는 방문하는 숫자정보와 누적 방문 횟수를 저장해주면 된다.
그리고 현재 방문하는 숫자 - 1, 숫자 + 1, 숫자 x 2를 방문해주면 된다. 총 3가지 경우에 대해 모두 방문해보는 것이다.
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
int n,k,ans;
queue<pair<int,int>> q;
bool visited[200001];
void bfs(){
while (!q.empty()) {
int num = q.front().first;
int cnt = q.front().second;
q.pop();
if (num == k) {
ans = cnt;
break;
}
if (num-1 >= 0 && num-1 < 100001 && !visited[num-1]){
visited[num-1] = true;
q.push({ num - 1, cnt + 1 });
}
if (num+1 >= 0 && num+1 < 100001 && !visited[num+1]){
visited[num+1] = true;
q.push({ num + 1, cnt + 1 });
}
if (num*2 >= 0 && num*2 < 100001 && !visited[num*2]){
visited[num*2] = true;
q.push({ num *2, cnt + 1 });
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n >> k;
q.push({n,0});
visited[n]= true;
bfs();
cout << ans;
return 0;
}
728x90