#include <iostream>
#include <queue>
bool visit[100001];
int main()
{
int N = 0;
int K = 0;
int iCount = 100000;
std::cin >> N >> K;
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, std::greater<std::pair<int, int>>> priQue = {};
priQue.push({ 0,N });
while (!priQue.empty())
{
std::pair<int, int> pairInt = priQue.top();
int iTime = pairInt.first;
int iNumber = pairInt.second;
priQue.pop();
if (iNumber == K)
{
std::cout << iTime;
return 0;
}
if (iNumber * 2 < 100001)
{
if (!visit[iNumber * 2])
{
priQue.push({ iTime, iNumber * 2 });
visit[iNumber * 2] = true;
}
}
if (iNumber + 1 < 100001)
{
if (!visit[iNumber + 1])
{
priQue.push({ iTime + 1, iNumber + 1 });
visit[iNumber + 1] = true;
}
}
if (iNumber - 1 >= 0)
{
if (!visit[iNumber - 1])
{
priQue.push({ iTime + 1 , iNumber - 1 });
visit[iNumber - 1] = true;
}
}
}
return 0;
}
우선순위큐는 생각해보고 사용했었는데 여기서 방문한 곳은 아예 방문 안하게 되는 것도 좀 새로웠다.
다익스트라자 알고리즘인데 여전히 잘 못 써서... 공부가 아직 모자르구나 싶다...
'오늘의 알고리즘' 카테고리의 다른 글
[C++]백준 1806 부분합 (0) | 2022.04.28 |
---|---|
[C++] 백준 1253번 좋다 (0) | 2022.04.27 |
[C++]백준 10021번 Watering the Fields (0) | 2022.04.22 |
[C++]위클리 챌린지 모음사전(프로그래머스 2레벨) (0) | 2022.04.21 |
[C++]위클리 챌린지 최소직사각형(프로그래머스 1레벨) (0) | 2022.04.20 |