Bj_s2


title: 2026-01-25 author: 강병호 (이름) date: 2026-01-25 (날짜) category: TIL/강병호/2026/01 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —

// N과 M (10)


// N개의 자연수 중에서 M개 고르기
// 비내림차순
// 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class Main {

    static int[] arr;
    static int N;
    static int M;
    static int[] output;
    static Set<String> sm = new HashSet<String>();
    static StringBuilder res = new StringBuilder();
    static StringBuilder sb;


    public static void solve(int depth, int startIdx) {
        if (depth == M) {
            sb = new StringBuilder();
            for (int i = 0; i < M; i++) {
                sb.append(output[i]);
                sb.append(" ");
            }
            if (sm.contains(sb.toString())) {
                // 포함 된 경우
                return;
            }
            sm.add(sb.toString());
            res.append(sb.toString());
            res.append("\n");
            return;
        }

        for (int i = startIdx; i < N; i++) {
            output[depth] = arr[i];
            solve(depth + 1, i + 1);
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        output = new int[M];
        arr = new int[N];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(arr);

        solve(0, 0);

        System.out.println(res.toString());

    }
}

results matching ""

    No results matching ""