N개의 정수가 주어지면 그 숫자들 중 K개를 뽑는 조합의 합이 임의의 정수 M의 배수인 개수
는 몇 개가 있는지 출력하는 프로그램을 작성하세요.
예를 들면 5개의 숫자 2 4 5 8 12가 주어지고, 3개를 뽑은 조합의 합이 6의 배수인 조합을
찾으면 4+8+12 2+4+12로 2가지가 있습니다.
K : 3
numbers : [2, 4, 5, 8, 12]
M : 6
const DFS = (L, S) => {
if (L === k) {
const sum = temp.reduce((acc, cur) => acc + cur, 0);
sum % m === 0 && count++;
}
L === K
이다. L===K
일 때 조합 하나가 나왔다는 뜻이므로, 해당 조합의 원소들의 합이 m
의 배수인지 검사한다.else {
for (let i = S; i < numbers.length; i++) {
temp[L] = numbers[i];
DFS(L + 1, i + 1);
}
}
S
가 필요한 이유는, DFS 로 깊이가 깊어질 때마다 for 문을 돌 때 이전 깊이에서 temp 에 넣었던 numbers
의 원소를 또 넣으면 안되기 때문이다.const solution = (numbers, k, m) => {
let count = 0;
const temp = Array.from({ length: k }, () => 0);
const DFS = (L, S) => {
if (L === k) {
const sum = temp.reduce((acc, cur) => acc + cur, 0);
sum % m === 0 && count++;
} else {
for (let i = S; i < numbers.length; i++) {
temp[L] = numbers[i];
DFS(L + 1, i + 1);
}
}
};
DFS(0, 0);
return count;
};