No Rules Rules

숫자고르기 (feat. 백준, 2668번) 본문

생활/코테

숫자고르기 (feat. 백준, 2668번)

개발하는 완두콩 2023. 4. 13. 12:28
728x90
반응형

숫자고르기
https://www.acmicpc.net/problem/2668

 

2668번: 숫자고르기

세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string.h>
#include <set>
using namespace std;
int arr[101]{0};
bool visit[101]{false};
set<int> ans;
void dfs(register int i, register int j){
    if(visit[j]){
        if(i == j)
            ans.insert(j);
        return;
    }
    visit[j] = true;
    dfs(i, arr[j]);
}
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
    register int N;
    cin >> N;
    for(register int n = 1, v; n <= N; ++n)
        cin >> v, arr[n] = v;
    for(register int n = 1; n <= N; ++n){
        visit[n] = true;
        dfs(n, arr[n]);
        memset(visit, false, N + 1);
    }
    cout << ans.size() << '\n';
    for(auto& v : ans)
        cout << v << '\n';
	return 0;
}
// *&)*@*

 

반응형

첫줄의 i와 둘째줄이 가리키는 첫줄로 이동값을 통해 dfs로 풀이하였습니다.

728x90
반응형
Comments