#include <iostream>
#include <algorithm>
#include <memory>
#include <queue>
#include <tuple>
int N = 0;
int K = 0;
std::queue<int> que = {};
int visit[100001] = {};
bool QuePush(int iStart, int iDist)
{
if (iDist >= 0 && iDist <= 100000)
{
if (visit[iDist] != 100000)
return false;
visit[iDist] = visit[iStart] + 1;
if (iDist == K)
{
std::cout << visit[iDist];
return true;
}
que.push(iDist);
}
return false;
}
int main()
{
std::cin >> N >> K;
if (K <= N)
{
std::cout << N - K;
return 0;
}
for (int i = 0; i <= 100000; ++i)
{
visit[i] = 100000;
}
visit[N] = 0;
que.push(N);
while (!que.empty())
{
int iStart = que.front();
que.pop();
int iDist = iStart + 1;
if (QuePush(iStart, iDist))
return 0;
iDist = iStart - 1;
if (QuePush(iStart, iDist))
return 0;
iDist = iStart * 2;
if (QuePush(iStart, iDist))
return 0;
}
return 0;
}
BFS, 더해가면서 풀면 바로 답을 낼 수 있다.
i <= N 처리를 안해서 뭐가 틀렸는지 찾느라 오래걸렸다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 2468 안전 영역 (0) | 2022.05.13 |
---|---|
[C++] 백준 5014 스타트링크 (0) | 2022.05.13 |
[C++] 백준 7569번 토마토 (0) | 2022.05.12 |
[C++] 백준 2644 촌수 계산 (0) | 2022.05.11 |
[C++] 백준 2667 단지번호붙이기 (0) | 2022.05.11 |