https://www.acmicpc.net/problem/2668
풀이
사이클을 찾는 문제이다.
`arr[i] -> arr[arr[i]]`
이런식으로 뽑힌 정수를 인덱스로 하는 숫자를 다시 봐야한다.
처음 시작한 숫자와 같은 숫자가 나오면 사이클이 완성된다.
dfs탐색을 통해 뽑힌 정수를 인덱스로 하여 탐색했고 처음 숫자가 나왔을 때 list에 넣었다.
메모리: 14216KB
시간: 128ms
언어: Java 11
import java.util.*;
import java.io.*;
public class Main {
static int[] arr;
static ArrayList<Integer> list;
static boolean[] visit;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
arr = new int[N + 1];
for (int i = 1; i < N + 1; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
list = new ArrayList<>();
visit = new boolean[N + 1];
for (int i = 1; i < N + 1; i++) {
visit[i] = true;
dfs(i, i);
visit[i] = false;
}
Collections.sort(list);
System.out.println(list.size());
list.stream().forEach(System.out::println);
}
private static void dfs(int idx, int st) {
if (arr[idx] == st) {
list.add(st);
}
if (!visit[arr[idx]]) {
visit[arr[idx]] = true;
dfs(arr[idx], st);
visit[arr[idx]] = false;
}
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 13144: List of Unique Numbers - JAVA (0) | 2024.05.17 |
---|---|
[백준] 22251: 빌런 호석 - JAVA (1) | 2024.05.17 |
[백준] 2075: 스카이라인 쉬운거 - JAVA (0) | 2024.05.17 |
[백준] 15989: 1, 2, 3 더하기 4 - JAVA (0) | 2024.05.17 |
[백준] 20922: 겹치는 건 싫어 - JAVA (0) | 2024.05.17 |
[백준] 2075: N번째 큰 수 - JAVA (0) | 2024.05.17 |