백준

백준 15663 - Java

으엉어엉 2024. 11. 21. 09:57
728x90

import java.util.*;

public class BJ15663 {
    static int N, M;
    static int[] Narr;
    static boolean[] visited;
    static List<Integer> sequence;
    static Set<String> resultSet;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        Narr = new int[N];
        visited = new boolean[N];
        sequence = new ArrayList<>();
        resultSet = new HashSet<>();

        // 입력받기
        for (int i = 0; i < N; i++) {
            Narr[i] = sc.nextInt();
        }

        // 배열 정렬 (사전 순 출력을 위해)
        Arrays.sort(Narr);

        // 백트래킹 시작
        backtrack(0);
    }

    static void backtrack(int depth) {
        if (depth == M) {
            // 수열이 완성된 경우
            StringBuilder sb = new StringBuilder();
            for (int num : sequence) {
                sb.append(num).append(" ");
            }
            String result = sb.toString().trim();

            // 중복 제거 및 출력
            if (!resultSet.contains(result)) {
                resultSet.add(result);
                System.out.println(result);
            }
            return;
        }

        for (int i = 0; i < N; i++) {
            if (!visited[i]) {
                visited[i] = true;
                sequence.add(Narr[i]);
                backtrack(depth + 1);
                sequence.remove(sequence.size() - 1); // 되돌리기
                visited[i] = false;
            }
        }
    }
}

 

set을 이용해 중복은 제거 했다.

728x90

'백준' 카테고리의 다른 글

백준 1629 - Java  (0) 2024.11.23
백준 16953 - Java  (0) 2024.11.22
백준 11725 - Java  (1) 2024.11.20
백준 1300 - Java  (0) 2024.11.19
백준 15666 - Java  (0) 2024.11.18