- 문제
- 중복되지 않는 숫자로 이루어진 카드를 여러 장 받고
- 그 카드 중 3장씩을 골라 그 합이 소수가 되는 경우의 수를 리턴
- 시도
- 소수를 판별하는 함수를 작성
- 조합을 만들어줄 함수 작성
- 소수의 갯수를 세어줄 카운터 선언
- 3부분집합을 만들어 그 숫자를 모두 더하고
- 더한 숫자가 소수인지를 판별, 맞으면 카운팅
- 전부 다 계산하고, 카운팅 리턴하는 코드를 짜보려고 하였음
- 수도코드
function isPrime(num) {
if (num === 2) return true;
for (let i = 2; i <= Math.floor(Math.sqrt(num)); i++) {
if (num % i === 0) return false;
}
return true;
}
function getCombinations(array, selectNumber) {
const results = [];
if(selectNumber === 1){
return array.map((element) => [element]);
}
array.forEach((fixed, index, origin) => {
const rest = origin.slice(index+1);
const combinations = getCombinations(rest, selectNumber - 1);
const attached = combinations.map((combination) => [fixed, ...combination]);
results.push(...attached);
});
return results;
}
function boringBlackjack(cards) {
let cnt = 0;
let result = getCombinations(cards, 3);
let sum = [];
for (let i = 0; i < result.length; i++) {
let a = 0;
for (let j = 0; j < result[i].length; j++) {
a = a + result[i][j]
}
sum.push(a)
}
for (let k = 0; k < sum.length; k++) {
if (isPrime(sum[k])) {
cnt++
}
}
return cnt;
}
- 레퍼런스
function boringBlackjack(cards) {
let count = 0;
let length = cards.length;
for (let i = 0; i < length; i++) {
for (let j = i + 1; j < length; j++) {
for (let k = j + 1; k < length; k++) {
const number = cards[i] + cards[j] + cards[k];
if (isPrime(number)) count++;
}
}
}
function isPrime(number) {
for (let i = 2; i < number/2; i++) {
if (number % i === 0) return false;
}
return true;
}
return count;
}