Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 2668. 숫자고르기 본문

acmicpc

[BAEKJOON] 2668. 숫자고르기

코드와이 2021. 7. 14. 22:51

 

문제링크

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