백준 1697번 숨바꼭질

빵어 ㅣ 2023. 3. 21. 16:59

#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