백준 6603 로또 문제 풀이입니다
재귀, 백트래킹, 순열로 풀었습니다.
문제
독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다.
로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다.
예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34])
집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오.
풀이
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const len = input.length;
const LOTTO_COUNT = 6;
const getLottoCase = (input) => {
const maxCount = input[0];
const sets = input.slice(1);
let result = "";
const permute = (arr, m = [], i = 0) => {
if (m.length === LOTTO_COUNT) {
result += `${m.join(" ")}\n`;
} else {
for (i; i < arr.length; i++) {
let current = arr.slice();
let next = current.splice(i, 1);
permute(current.slice(), m.concat(next), i);
}
}
};
permute(sets);
return result;
};
for (let i = 0; i < len - 1; i++) {
console.log(getLottoCase(input[i].split(" ").map((n) => Number(n))));
}
'알고리즘 풀이' 카테고리의 다른 글
[백준 1759, NodeJS] 암호만들기 (0) | 2021.01.19 |
---|