백준 15652번 node.js
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, m] = input[0].split(" ").map(Number);
const numList = [];
const selected = [];
for (let i = 1; i <= n; i += 1) {
numList.push(i);
}
let answer = "";
const dfs = (array, depth, start) => {
if (depth === m) {
const result = [];
for (let i of selected) result.push(numList[i]);
answer += result.join(" ") + "\n";
return;
}
//start의 인덱스부터 확인
for (let i = start; i < n; i += 1) {
selected.push(i);
dfs(numList, depth + 1, i);
selected.pop();
}
};
dfs(numList, 0, 0);
console.log(answer);
비내림차순은 중복이 가능한 오름차순이기때문에 visited 배열을 사용할 필요는 없습니다.
선택된 값보다 같거나 커야하므로, 다음 depth에 selected에 가장 마지막에 들어간 수를 start 변수로 넘겨주었습니다.