Skip to content

Commit d2fa947

Browse files
committed
boj_9466_텀프로젝트
1 parent a8d2fb4 commit d2fa947

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

Gold/boj_9466_텀프로젝트.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+

0 commit comments

Comments
 (0)