diff --git a/code_study/Baekjoon/java/_9466.java b/code_study/Baekjoon/java/_9466.java new file mode 100644 index 0000000..8626559 --- /dev/null +++ b/code_study/Baekjoon/java/_9466.java @@ -0,0 +1,57 @@ +import java.util.*; + +public class _9466 { + static boolean[] visited; + static boolean[] done; + static int[] select; + static int cnt; + + static void dfs(int current) { + visited[current] = true; + int next = select[current]; + + if (!visited[next]) dfs(next); + else if (!done[next]) { + cnt++; + int n = next; + while(n != current) { + cnt++; + n = select[n]; + } + } + + done[current] = true; + } + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int T = sc.nextInt(); + String result = ""; + + while (T-- > 0) { + int N = sc.nextInt(); + select = new int[N+1]; + visited = new boolean[N+1]; + done = new boolean[N+1]; + cnt = 0; + + for(int i=1; i<=N; i++) { + select[i] = sc.nextInt(); + if (select[i] == i) { + cnt++; + visited[i] = true; + done[i] = true; + } + } + + for(int n = 1; n<=N; n++) { + if (!done[n]) dfs(n); + } + + result += "" + (N-cnt) + "\n"; + } + + System.out.println(result); + sc.close(); + } +}