나의 브을로오그으

[c++] 1697번 : 숨바꼭질 본문

알고리즘/BaekJoon

[c++] 1697번 : 숨바꼭질

__jhp_+ 2022. 6. 14. 18:52

https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

#include <iostream>
#include <queue>
using namespace std;

bool bPoint[100001] = { false, };
int countOfMove(int depart, int dest);

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int count = 0;
	int N, K;
	cin >> N >> K;

	count = countOfMove(N, K);
	cout << count << '\n';

	return 0;
}

int countOfMove(int depart, int dest)
{
	queue<int> q;
	int count = 0;

	bPoint[depart] = true;
	q.push(depart);
	while (q.empty() == false)
	{
		int size = q.size();
		for (int i = 0; i < size; ++i)
		{
			int cur = q.front();
			q.pop();
			if (cur == dest) {
				return count;
			}
			else
			{
				bPoint[cur] = true;
				if (cur - 1 >= 0 && bPoint[cur - 1] == false)
				{
					q.push(cur - 1);
				}
				if (cur + 1 <= 100000 && bPoint[cur + 1] == false)
				{
					q.push(cur + 1);
				}
				if (cur * 2 <= 100000 && bPoint[cur * 2] == false)
				{
					q.push(cur * 2);
				}
			}
		}
		++count;
	}

	return count;
}