새로운 카드 놀이를 만들었습니다. 룰은 다음과 같습니다.
예로, [1, 2, 3, 4]라는 카드를 받았을 때 만들 수 있는 숫자는 6, 7, 8, 9이고, 소수는 7 하나이기 때문에 가지고 있는 소수의 개수는 1개입니다.
[2, 3, 4, 8, 13]라는 카드를 받았을 때 만들 수 있는 숫자는 9, 13, 18, 14, 19, 23, 15, 20, 24, 25이고, 소수는 13, 19, 23 총 3개이기 때문에 가지고 있는 소수의 개수는 3개입니다.
이 카드 게임은 조합 개념이 적용됩니다.
여러 장의 카드 중, 순서를 고려하지 않고 3장을 뽑습니다.
function primeJack(cards) {
let count = 0;
// 3중 반복문을 수행합니다.
for (let i = 0; i < cards.length; i++) {
for (let j = i + 1; j < cards.length; j++) {
for (let k = j + 1; k < cards.length; k++) {
// 세 가지 카드의 숫자를 더하여 소수를 판별합니다.
// 소수라면, 경우의 수를 1 증가시킵니다.
if (isPrime(cards[i] + cards[j] + cards[k])) count++;
}
}
}
return count;
}
// 인자로 들어온 숫자가 소수인지 판별하는 함수입니다.
// 시간 복잡도를 고려하여 숫자의 제곱근 값 까지만 반복 순회합니다.
const isPrime = function (num) {
if (num === 2) return true;
if (num % 2 === 0) return false;
for (let i = 3; i <= Math.floor(Math.sqrt(num)); i += 2) {
if (num % i === 0) return false;
}
return true;
};
console.log(primeJack([10, 11, 1, 5, 18]));