https://www.acmicpc.net/problem/15666
주어진 숫자들을 Set 자료형으로 중복을 제거 & 정렬 한 후, 깊이우선탐색으로 현재 index보다 크거나 같은 원소들을 하나씩 붙여가면된다.
let [[N, M], numbers] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n").map((e) => e.split(" ").map(Number));
const answer = new Array();
numbers = [...new Set(numbers)].sort((a, b) => a - b);
function dfs(depth, index, result) {
/* M개만큼 붙였다면 answer에 추가하고 되돌아간다. */
if (depth === M) {
answer.push(result.trim());
return;
}
/* 자신보다 같거나 높은 index의 원소들을 하나씩 붙인다. */
for (let i = index; i < numbers.length; i++) {
dfs(depth + 1, i, result + " " + String(numbers[i]));
}
}
dfs(0, 0, "");
console.log(answer.join("\n"));