[BOJ 9466] ํ ํ๋ก์ ํธ
1. ๋ฌธ์ : https://www.acmicpc.net/problem/9466
2. ํ์ด
dfs + dp ๋ฌธ์
3. ์ฝ๋
package baekjoon;
import java.util.*;
public class ํ
ํ๋ก์ ํธ {
static int[] students; // ํ์ ๋ฐฐ์ด
static int[] check; // ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋ ๊ฒ์ธ์ง
static int[] startV; // ์์ ์ ์
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while(T-- >0){
int N = sc.nextInt();
students = new int[N+1];
check = new int[N+1];
startV = new int[N+1];
for (int i=1; i<=N; i++)
students[i] = sc.nextInt();
int result = 0;
for (int i=1; i<=N; i++){
if (check[i]==0) // ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
result += dfs(i, 1, i);
}
System.out.println(N-result);
}
}
static int dfs(int i, int cnt, int start){
if (check[i] != 0){ // ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ์ ์ ์ด๋ฉด
if (start != startV[i]) // ์์ ์ ์ ๊ณผ ๋ค๋ฅธ์ง ํ์ธ
return 0;
return cnt-check[i]; // ๊ฐ์ผ๋ฉด ๋ช ๋ฒ์งธ ๋ฐฉ๋ฌธํ ์ ์ ์ธ์ง
}
check[i] = cnt; // ๋ช ๋ฒ์งธ ๋ฐฉ๋ฌธํ๊ฑด์ง ์ ์ฅ
startV[i] = start;
return dfs(students[i], cnt+1, start);
}
}
'๐ป Coding Problems Solving > DFS | BFS | Backtracking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ 16234] ์ธ๊ตฌ์ด๋ (0) | 2023.08.17 |
---|---|
[BOJ 1103] ์คํํธ๋งํฌ (0) | 2023.08.11 |
[BOJ 2668] ์ซ์๊ณ ๋ฅด๊ธฐ (0) | 2023.06.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ด๋ฌผ์บ๊ธฐ (์๋ฐ java) (0) | 2023.05.18 |
[BOJ 17086] ์๊ธฐ์์ด2 (0) | 2023.05.16 |
์ต๊ทผ๋๊ธ