#include <iostream>
#include <queue>
int arr[1000001] = {};
int main()
{
int N = 0;
std::cin >> N;
std::queue<std::pair<int,int>> que = {};
que.push({ N, N });
while (!que.empty())
{
int now = que.front().first;
int prev = que.front().second;
que.pop();
if (now == 1)
{
arr[now] = prev;
break;
}
if (arr[now])
{
continue;
}
else
{
arr[now] = prev;
}
if (now % 3 == 0)
{
que.push({ now / 3, now});
}
if (now % 2 == 0)
{
que.push({ now / 2, now });
}
que.push({ now - 1, now });
}
std::vector<int> ans = {};
int check = 1;
while (check != N)
{
ans.push_back(check);
check = arr[check];
}
ans.push_back(N);
std::cout << ans.size() - 1 << "\n";
for (int i = ans.size() - 1; i >= 0; --i)
{
std::cout << ans[i] << " ";
}
return 0;
}
큐로 탐색했습니다.
들어올 경우 이전에 어떤 것인지 체크해줍니다.
나뉘면 넣어주고 안나뉘면 넘어갑니다. (1이 나올 때까지 반복합니다.)
1에서 N까지 어떻게 나와있는지 벡터에 넣어줍니다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 1197 최소 스패닝 트리 (0) | 2022.11.12 |
---|---|
[C++] 백준 1007 벡터 매칭 (0) | 2022.11.12 |
[C++] 백준 1005 ACM Craft (0) | 2022.11.10 |
[C++] 백준 17144 미세먼지 안녕! (0) | 2022.11.08 |
[C++] 백준 17070 파이프 옮기기 1 (0) | 2022.11.07 |