
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//백준
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
for (int t = 0; t < tc; t++) {
int size = Integer.parseInt(br.readLine());
int[] array = new int[size + 1];
boolean[] visited = new boolean[size + 1];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int point=0, count=0;
for (int i = 1; i < size + 1; i++) {
array[i] = Integer.parseInt(st.nextToken());
}
if(array[1]!=1) {
visited[1]=true;
}
for (int i = 1; i < size + 1; i++) {
point=array[i];
if(visited[point]==false) {
while(visited[point]==false) {
visited[point]=true;
point=array[point];
}
count++;
}
}
System.out.println(count);
}
}
}
방문여부로 반복되지 않게함.
1번에 있에 있는 값이 포인터가 되서 값을 찾아가고 방문했던 곳을 가게 되면 그때 +1 을 카운팅해주었다.
'알고리즘(BOJ) > Silver' 카테고리의 다른 글
2667 - 단지번호붙이기 (BFS) (0) | 2023.01.11 |
---|---|
6603 - 로또 (조합&재귀) (0) | 2022.12.30 |
1010 - 다리 놓기 (조합) (0) | 2022.12.29 |
2178 - 미로찾기 (BFS) (0) | 2022.12.26 |
1012 - 유기농배추(BFS) (0) | 2022.12.23 |