#include <iostream>
#include <queue>
 
int visit[100001] = {};
 
int main() 
{
	int N = 0;
	int K = 0;
	std::cin >> N >> K;
 
	int iMax = 100001;
	int	iCount = 0;
	std::queue<std::pair<int, int>> que = {};
	que.push({N, 0});
 
	while (!que.empty()) 
	{
		int iNow = que.front().first;
		int iNum = que.front().second;
		que.pop();
 
		visit[iNow] = 1;
 
		if (iMax < iNum) 
			break;
 
		if (iNow == K) 
		{
			iMax = iNum;
			++iCount;
 
			continue;
		}
 
		if (iNow + 1 <= 100000 && !visit[iNow + 1])
		{
			que.push({ iNow + 1, iNum + 1 });
		}
 
		if (iNow - 1 >= 0 && !visit[iNow - 1])
		{
			que.push({ iNow - 1, iNum + 1 });
		}
 
		if (iNow * 2 <= 100000 && !visit[iNow * 2])
		{
			que.push({ iNow * 2, iNum + 1 });
		}
	}
 
	std::cout << iMax << "\n" << iCount;
 
	return 0;
}

큐로 입력하면 됩니다.

처음엔 큐에 입력하면서 진행했었는데 50퍼센트에서 틀리길래... 뭔가 싶었는데... 1 4로 입력하게 되면

1 + 1, 1 * 2 를 입력하면서 한번 실패하고 들어가서 수가 부족하게 됩니다.

그렇기 때문에 입력할 때 visit체크가 아니라 나올 때 visit체크를 한다면 성공합니다.

 

+ Recent posts