๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] Q.10451 ์์ด ์ฌ์ดํด ๋ฌธ์ ํ์ด - java
๐ ๋ฌธ์
https://www.acmicpc.net/problem/10451
๐ ์ ๊ทผ๋ฒ
Q.10451 ์์ด ์ฌ์ดํด ๋ฌธ์ ํ์ด์ ๋๋ค.
๋ฌธ์ ์์ ์์ด ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๊ณ
์ด ์์ด ๊ทธ๋ํ์์ ์์ด ์ฌ์ดํด์ ๊ฐ์๊ฐ ๋ช๊ฐ์ธ์ง๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
์์ด ๊ทธ๋ํ๋ฅผ ๋ง๋ค๊ณ
๊ทธ๋ํ ํ์ dfs๋ฅผ ํตํด์ ํ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
dfs๋ฅผ ํตํด ํ์์ ํ๋ค ์ด๋ฏธ ๋ฐฉ๋ฌธ ํ๋ ๊ณณ์ ๋ค์ ๋ฐฉ๋ฌธํ๋ คํ๋ค๋ฉด
์ฌ์ดํด์ด๋ฏ๋ก ์ฌ์ดํด ๊ฐ์๋ฅผ ๋๋ ค์ค๋๋ค.
์ต์ข ์ ์ผ๋ก ์ฌ์ดํด์ ๊ฐ์๋ฅผ ์ ์ ์์ต๋๋ค.
๐ป ์ฝ๋
package problem.bfsdfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main_10451 {
static int count = 0;
static int t,n;
static List<List<Integer>> adjList;
static boolean[] visited;
public static void main(String[] args) throws IOException {
input();
}
private static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
t = Integer.parseInt(br.readLine());
for(int num=0; num<t; num++){
count = 0;
adjList = new ArrayList<>();
n = Integer.parseInt(br.readLine());
visited = new boolean[n+1];
for(int i=0; i<=n; i++){
adjList.add(new ArrayList<>());
}
String temp[] = br.readLine().split(" ");
for(int i=1; i<=n; i++){
int v = Integer.parseInt(temp[i-1]);
adjList.get(i).add(v);
}
for(int i=1; i<=n; i++){
if(!visited[i]){
dfs(i);
}
}
System.out.println(count);
}
br.close();
}
private static void dfs(int start){
visited[start] = true;
for(int next : adjList.get(start)){
if( !visited[next] ){
dfs(next);
}
else{
count++;
return;
}
}
}
}
Written on April 8, 2021