반응형
- 알고리즘 분류 : DFS
- 사용 언어 : JAVA
소스 설명은 주석을 참고해주세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int[] arr;
static int N;
static List<Integer> answer = new ArrayList<>();
static boolean[] visited;
static int target = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N+1];
visited = new boolean[N+1];
for(int i=1; i<N+1; i++)
arr[i] = Integer.parseInt(br.readLine());
// 하나씩 확인
for(int i=1; i<N+1; i++){
visited[i] = true;
target = i;
DFS(i);
// 백트래킹
visited[i] = false;
}
// 정답 출력
System.out.println(answer.size());
answer.stream().sorted().forEach(System.out::println);
}
static void DFS(int idx) {
// 아랫줄 값 인덱스에 접근한 적이 없다면 가서 탐색
if (!visited[arr[idx]]) {
visited[arr[idx]] = true;
DFS(arr[idx]);
visited[arr[idx]] = false;
}
if (arr[idx] == target)
answer.add(target);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 7562번 : 나이트의 이동 (JAVA) (0) | 2023.05.10 |
---|---|
[BAEKJOON] 2210번 : 숫자판 점프(JAVA) (0) | 2023.05.08 |
[BAEKJOON] 9251번 : LCS (JAVA) (0) | 2023.04.07 |
[BAEKJOON] 10815번 : 숫자 카드 (JAVA) (0) | 2023.04.05 |
[BAEKJOON] 2110번 : 공유기 설치 (JAVA) (0) | 2023.04.04 |