#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체크를 한다면 성공합니다.
'오늘의 알고리즘' 카테고리의 다른 글
| [C++] 백준 14502 연구소 (0) | 2022.10.30 |
|---|---|
| [C++] 백준 13172 Σ (0) | 2022.10.29 |
| [C++] 백준 11779 최소비용 구하기 2 (0) | 2022.10.28 |
| [C++] 백준 11054 가장 긴 바이토닉 부분 수열 (0) | 2022.10.26 |
| [C++] 백준 15654 N과 M(5) (0) | 2022.10.25 |