문제링크
https://www.acmicpc.net/problem/15663
문제풀이
- dfs로 탐색하면서 동시에 백트래킹으로 효율성을 최대화 했다.
- Set 객체를 이용하여 중복을 방지하였다.
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let [N, M] = input[0].split(" ").map((n) => Number(n));
let arr = input[1].split(" ").map((n) => Number(n));
// 정렬
arr.sort((a, b) => a - b);
let set = new Set([]);
// 숫자 세트를 담을 array
let group = [];
// 숫자 세트의 인덱스 그룹
let indexGroup = [];
let dfs = (count) => {
if (count === M) {
set.add(group.join(" "));
return;
}
for (let i = 0; i < arr.length; ++i) {
if (!indexGroup.includes(i)) {
group.push(arr[i]);
indexGroup.push(i);
dfs(count + 1);
group.pop();
indexGroup.pop();
}
}
};
dfs(0, 0);
set.forEach((item) => {
console.log(item);
});
'🔒Algorithm' 카테고리의 다른 글
백준[node.js] > 1927번 최소 힙 (0) | 2024.12.19 |
---|---|
백준[node.js] > 21736번 헌내기는 친구가 필요해 (0) | 2024.12.17 |
백준[node.js] > 11727번 2xn 타일링 2 (0) | 2024.12.15 |
백준[node.js] > 30804번 과일 탕후루 (0) | 2024.12.14 |
백준[node.js] > 1463번 1로 만들기 (0) | 2024.12.13 |