Competition/Baekjoon

[백준] 10451번 순열사이클

bisi 2020. 3. 24. 10:11
문제 출처 

https://www.acmicpc.net/problem/10451

 

10451번: 순열 사이클

문제 1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\  3& 2&7&8&1&4&5&6 \end{pmatrix}\) 와 같다. 또는, Figure 1과 같이 방향 그래프로 나타낼 수도 있다. 순열을 배열을 이용해 \(\begin{pmatrix} 1

www.acmicpc.net

 

 

 

접근 방식 및 풀이

- DFS를 이용하여 DFS를 하나씩 완성할때마다 Count를 올려준다.

 

 

 

 

소스 코드 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    static ArrayList<Integer>[] list;
    static int size, count;
    static boolean[] check;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int total = sc.nextInt();

        for (int i = 0; i <total ; i++) {
            count =0;
            size = sc.nextInt();
            list = new ArrayList[size+1];
            check = new boolean[size+1];
            int result=0;


            for (int j = 1; j <= size ; j++) {
                list[j] = new ArrayList<Integer>();
            }
            for (int k = 1; k <= size ; k++) {
                int tmp = sc.nextInt();
                list[k].add(tmp);
                list[tmp].add(k);
            }
            for (int j = 1; j <=size ; j++) {
                if(!check[j]){
                    dfs(j);
                    count++;
                }
            }
            System.out.println(count);

        }

    }

    public static void dfs(int v ){
        if(check[v]){

            return;
        }

        check[v] = true; // 방문 체크

        for (int vv : list[v]) { // v에 연결된 노드 가져옴.
            if(!check[vv]){// 방문하지 않았으면 dfs 다시 돌려
                dfs(vv);
            }
        }

    }

}

 

 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 1654번 랜선 자르기  (0) 2020.03.24
[백준] 2261번 자바  (0) 2020.03.23
[백준] 4962번 섬의 개수 DFS, BFS  (0) 2020.03.23