#include <iostream>
#include <queue>
using namespace std;
int n, k;
int graph[100001];
queue<int> q;
int bfs() {
int a = 0;
while (!q.empty()) {
a = q.front();
q.pop();
int d[3] = { a - 1, a + 1, a * 2 };
for (int i = 0; i < 3; ++i) {
if (d[i] < 0 || d[i] > 100000) continue;
if (graph[d[i]] == 0) {
graph[d[i]] = graph[a] + 1;
q.push({ d[i] });
}
if (d[i] == k)
return graph[d[i]];
}
}
return graph[a] - 1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> k;
q.push(n);
if (n == k) cout << 0;
else cout << bfs();
return 0;
}
범위설정... 어렵다... 꼼꼼히 생각하자
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
'알고리즘 공부' 카테고리의 다른 글
백준 1259번 팰린드롬수 C++ (0) | 2023.09.06 |
---|---|
백준 1018번 체스판 다시 칠하기 (0) | 2023.08.21 |
백준 7576번 토마토 (0) | 2023.03.16 |
백준 2178번 미로 탐색 (0) | 2023.03.16 |
백준 10026번 적록색약 (0) | 2023.03.16 |