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());
}
}