오늘의 알고리즘

[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;
}

처음에는 한개의 세트로 묶어서 성공하면

그 세트만 보내는 걸로 했더니

여러 개의 세트가 전부 성공했을 경우 실패하게 되었다.

그래서 하나씩 하는걸로 실행!