Algorithm/Baekjoon
[Java] ๋ฐฑ์ค 9466๋ฒ - ํ ํ๋ก์ ํธ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ
2022. 6. 28. 21:52
[๋ฌธ์ ]
[ํ์ด]
ํ์ ๊ฒฐ์ฑํ๊ธฐ ์ํด์ , ๊ฒฐ๊ตญ ๋ฃจํ๋ฅผ ๋์์ผ ํ๋ค๋ ์กฐ๊ฑด์ ๋ ์ฌ๋ฆฌ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด d -> a -> b -> c - > a ๋ฃจํ๊ฐ ๋๋ค๋ฉด, a๋ฅผ ๋ง๋ฌ์๋ ์ด์ [d,a,b,c]์ค์ a๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๋ฃจํ๊ฐ ๋ฉ๋๋ค. ์ฆ, a์ index๋ถํฐ ํ์ ๊ฒฐ์ฑํ ์ ์์ต๋๋ค.
- student[]์ index์์ ์ด๋ํ ์ซ์๋ฅผ ์ ์ฅ
- ๋ง์ฝ index -> index ๋ผ๋ฉด, ํผ์ ํ์ ์ด๋ฃจ๊ธฐ ๋๋ฌธ์ total++ ์ ํตํด 1๋ช ์ ํ์ ๊ฒฐ์ฑํ๊ณ , visit[index] = true๋ฅผ ํตํด ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- findTeam(student, N)์ ํตํด student๋ฐฐ์ด์ ๋๋ฉฐ, ๋ฐฉ๋ฌธํ์ง ์์ ํ์๋ค๋ง while๋ฌธ์ ํตํด ํ ๊ฒฐ์ฑ์ ์๋ํฉ๋๋ค. ๋ง์ฝ, ์ง๋์จ ํ์๋ค์ ArrayList arr์ ํ์ฌ ๋ฐฉ๋ฌธํ ํ์์ด ์๋ค๋ฉด ๋ฃจํ๋ฅผ ๋ง๋ฌ์ผ๋ ํ์ ๊ฒฐ์ฑํ๊ณ ํ์ถํ์ฌ total์ ๊ฐฑ์ ํฉ๋๋ค.
- ๋ง์ง๋ง์ N - total์ ํตํด ํ์ ๊ฒฐ์ฑํ์ง ๋ชปํ ํ์์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
[์ฝ๋]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static int total = 0;
public static boolean[] visit;
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int t=0;t<T;t++) {
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] student = new int[N+1];
visit = new boolean[N+1];
for(int i=1;i<=N;i++) {
student[i] = Integer.parseInt(st.nextToken());
if(i == student[i]) {
visit[i] = true;
total++;
}
}
findTeam(student, N);
sb.append(N-total + "\n");
total = 0;
}
System.out.println(sb.toString());
}
public static void findTeam(int[] student, int N) {
for(int i=1;i<=N;i++) {
if(visit[i]) {
continue;
}
int index = i;
ArrayList<Integer> arr = new ArrayList<>();
while(!visit[index]) {
visit[index] = true;
arr.add(index);
index = student[index];
if(visit[index] && arr.contains(index)) {
total = total + arr.size() - arr.indexOf(index);
}
}
// System.out.println(arr);
}
}
}