본문 바로가기

CS/Algorithm

(알고리즘) N과 M (3) - 중복순열

www.acmicpc.net/problem/15651

 

15651번: N과 M (3)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net


문제 설명

이전에 순열은 순서가 있지만 중복은 허용하지 않았다. 중복을 허용하지 않았다는 말은 자기 자신을 포함하지 않았다는 말을 의미한다.

ex) [1, 1] [2, 2] [3, 3]......

 

중복 순열을 구현할 땐 단지 이전에 구현하였던 순열에 방문 노드 로직만 제거하면 된다.

 

public class Problem_15649 {
    private static int n;
    private static int m;
    private static boolean[] visited;
    private static int[] arr;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        m = scanner.nextInt();

        visited = new boolean[n+1];
        arr = new int[m];

        dfs(0);

    }

    private static void dfs(int depth) {
        if (depth == m) {
            for (int i = 0; i < m; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();

            return;
        }

        for (int i = 1; i <= n; i++) {
            if (!visited[i]) {
                arr[depth] = i;
                visited[i] = true;
                dfs(depth + 1);
                visited[i] = false;
            }
        }
    }
}

 Code Link

github.com/mike6321/Algorithm/blob/master/Algorithm/src/main/java/me/choi/book/e_problem/nandm/Problem_15651.java

 

mike6321/Algorithm

알고리즘 공부를 위한 repository 입니다. Contribute to mike6321/Algorithm development by creating an account on GitHub.

github.com

 

'CS > Algorithm' 카테고리의 다른 글

(알고리즘) boj - 뱀 (3190)  (0) 2020.10.22
(알고리즘) N과 M (4) - 중복조합  (0) 2020.10.21
(알고리즘) N과 M (2) - 조합  (0) 2020.10.21
(알고리즘) N과 M (1) - 순열  (0) 2020.10.20
(알고리즘) 순열과 조합의 차이  (0) 2020.10.20