코드와이
[BAEKJOON] 2668. 숫자고르기 본문
문제링크
https://www.acmicpc.net/problem/2668
2668번: 숫자고르기
세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절
www.acmicpc.net
DFS 알고리즘을 사용해서 사이클을 찾는 문제
package acmicpc.Gold5;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class 숫자고르기 {
static int n, map[];
static List<Integer> list;
static boolean visited[];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
map = new int[n+1];
visited = new boolean[n+1];
list = new ArrayList<>();
for(int i = 1 ; i <= n ; i++) {
map[i] = sc.nextInt();
}
for(int i = 1 ; i <= n ; i++) {
visited[i] = true;
dfs(i, i);
visited[i] = false;
}
Collections.sort(list);
System.out.println(list.size());
for(int x : list) System.out.println(x);
}
public static void dfs(int startIdx, int idx) {
if(!visited[map[startIdx]]) {
visited[map[startIdx]] = true;
dfs(map[startIdx], idx);
visited[map[startIdx]] = false;
}
if(map[startIdx] == idx) list.add(idx);
}
}
'acmicpc' 카테고리의 다른 글
[BAEKJOON] 6593. 상범 빌딩 (0) | 2021.07.16 |
---|---|
[BAEKJOON] 5582. 공통 부분 문자열 (0) | 2021.07.16 |
[BAEKJOON] 1033. 감소하는 수 (0) | 2021.07.14 |
[BAEKJOON] 14226. 이모티콘 (0) | 2021.07.13 |
[BAEKJOON] 2470. 두 용액 (0) | 2021.07.09 |