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
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/C++] 17071번 숨바꼭질 5 (0) | 2022.11.24 |
---|---|
[백준/C++] 12851번 숨바꼭질 2 (0) | 2022.11.19 |
[백준/C++] 15683번 감시 (0) | 2022.11.14 |
[백준/C++] 1461번 도서관 (0) | 2022.11.10 |
[백준/C++] 1068번 트리 (0) | 2022.11.08 |