처음에는 입력을 두 개씩 받아서 [(1,3),(2,2)....] 식으로 풀다가 index랑 비교하여 푸는 방법을 찾아서 새로 풀어보았다
import java.util.Scanner;
public class B10451 {
static int[] intArr;
static boolean[] visited;
static int dfs(int j){
if(j == intArr[j] || visited[j]) return 1;
visited[j] = true;
return dfs(intArr[j]);
}
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int N = sc.nextInt();
for(int i=0; i<N; i++){
int M = sc.nextInt();
intArr = new int[M+1];
visited = new boolean[M+1];
int count = 0;
for(int j=1; j<M+1; j++){
intArr[j] = sc.nextInt();
}
for(int j=1; j<M+1; j++){
if(!visited[j]) count += dfs(j);
}
System.out.println(count);
}
}
}
'연습문제 > JAVA' 카테고리의 다른 글
2667-단지번호붙이기 (0) | 2022.08.08 |
---|---|
2331-반복수열 (0) | 2022.08.08 |
2178-미로탐색 (0) | 2022.08.07 |
1620-DFS와 BFS (0) | 2022.08.06 |
16234-인구이동 (0) | 2022.08.05 |