오늘의 알고리즘
[C++] 백준 2668 숫자고르기
하늘하늘 .
2022. 6. 21. 21:16
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
int N = 0;
int arr[101] = {};
int visit[101] = {};
std::vector<int> vec = {};
void DFS(int iStart, int iCur)
{
if (!visit[iCur])
{
visit[iCur] = iStart;
DFS(iStart, arr[iCur]);
}
else if (iCur == iStart)
{
vec.push_back(iStart);
return;
}
}
int main()
{
std::cin >> N;
for (int i = 1; i <= N; ++i)
{
std::cin >> arr[i];
}
for (int i = 1; i <= N; ++i)
{
DFS(i, i);
memset(visit, false, sizeof(visit));
}
std::cout << vec.size() << "\n";
for (int i = 0; i < vec.size(); ++i)
{
std::cout << vec[i] << "\n";
}
return 0;
}
처음에는 한개의 세트로 묶어서 성공하면
그 세트만 보내는 걸로 했더니
여러 개의 세트가 전부 성공했을 경우 실패하게 되었다.
그래서 하나씩 하는걸로 실행!