ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

[백준] 2668번 숫자고르기

SZCODE 2020. 8. 26. 16:10

https://www.acmicpc.net/problem/2668

 

2668번: 숫자고르기

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

www.acmicpc.net

import java.awt.geom.Area;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Main{
	static int N,remember = 0,count = 0,answer = Integer.MIN_VALUE;
	static int[] arr;
	static boolean[] visited;
	static ArrayList<Integer> list = new ArrayList();
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		arr = new int[N+1];
		visited = new boolean[N+1];
		
		for (int i = 1; i <= N; i++) {
			arr[i] = sc.nextInt();
			
		}//end of input
		
		for (int i = 1; i <= N; i++) {
			visited[i] = true;
			remember = i;
			dfs(i);
			visited[i] = false;
		}
		Collections.sort(list);
		System.out.println(list.size());
		
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		
	}
	public static void dfs(int x) {
		if(visited[arr[x]] == false) {
			visited[arr[x]] = true;
			dfs(arr[x]);
			visited[arr[x]] = false;
		}
		if(arr[x] == remember) list.add(remember);
	}
}