https://school.programmers.co.kr/learn/courses/30/lessons/131130
구현 아이디어 5분 구현 16분
check[idx_pick]이 0이 아니라면 사이클이 생겼다는 뜻이다.#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int check[101];
int solution(vector<int> cards) {
int answer = 0;
vector<int> tmp(cards.size() + 1);
for(int i = 1; i <= cards.size(); ++i) tmp[i] = cards[i - 1];
int group = 1;
for(int i = 1; i <= cards.size(); ++i)
{
if(check[i] == 0)
{
check[i] = group;
while(true)
{
// 처음 8 나올 것.
int idx_pick = tmp[i];
if(check[idx_pick])
{
i = 0;
++group;
break;
}
check[idx_pick] = group;
i = idx_pick;
}
}
}
// 디버깅.
//for(int i = 1; i <= cards.size(); ++i)
//printf("%d ", check[i]);
vector<int> result(cards.size() + 1);
for(int i = 1; i <= cards.size(); ++i)
{
int idx_group = check[i];
++result[idx_group];
}
sort(result.begin(), result.end(), greater());
return answer = result[0] * result[1];
}