File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import java .util .*;
2+ import java .io .*;
3+
4+ public class boj_9466_텀프로젝트 {
5+ static int [] arr ;
6+ static boolean [] visit , done ; // 방문, 팀 편성 완료 배열
7+ static int count ; // 팀이 완성된 인원 수
8+
9+ public static void main (String [] args ) throws IOException {
10+ BufferedReader bf = new BufferedReader (new InputStreamReader (System .in ));
11+ BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (System .out ));
12+
13+ int T = Integer .parseInt (bf .readLine ());
14+
15+ StringTokenizer st ;
16+ for (int p = 0 ; p < T ; p ++){
17+ int n = Integer .parseInt (bf .readLine ());
18+ arr = new int [n +1 ];
19+ visit = new boolean [n +1 ];
20+ done = new boolean [n +1 ];
21+ count = 0 ;
22+
23+ st = new StringTokenizer (bf .readLine ());
24+
25+ for (int i =1 ; i <= n ; i ++){
26+ arr [i ] = Integer .parseInt (st .nextToken ());
27+ }
28+
29+ for (int i =1 ; i <= n ; i ++){
30+ if (!done [i ]){
31+ dfs (i );
32+ }
33+ }
34+ bw .write ((n -count ) + "\n " );
35+ }
36+ bw .flush ();
37+ bw .close ();
38+ }
39+
40+ public static void dfs (int n ){
41+ // 이미 방문 했을 때!
42+ if (visit [n ]){
43+ done [n ] = true ; // 팀 편성 완료했다고 처리
44+ count ++; // 팀 편성 완료 인원 증가
45+ }else {
46+ // 방문하지 않았을 때 -> 방문 처리!
47+ visit [n ] = true ;
48+ }
49+
50+ // 다음 학생이 팀 결성을 아직 못했을 경우
51+ if (!done [arr [n ]]){
52+ dfs (arr [n ]);
53+ }
54+
55+ visit [n ] = false ;
56+ done [n ] = true ;
57+ }
58+ }
59+
60+
You can’t perform that action at this time.
0 commit comments