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
복사했습니다!