주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
function solution(nums) {
var answer = 0;
const permutation = (arr, num) => {
let result = [];
if (num === 1) return arr.map((item) => [item]);
arr.forEach((item, index) => {
const fixNum = item;
const restArr = arr.filter((_, restIndex) => restIndex !== index);
const permArr = permutation(restArr, num - 1);
const combArr = permArr.map((permArrItem) => [fixNum, ...permArrItem]);
result.push(...combArr);
});
return result;
};
const primeNumbers = new Set(permutation(nums, 3).map((item) => item.sort((a, b) => a - b)).map((item) => item.toString()));
let depPrimeNumbers = [];
for (let value of primeNumbers) {
depPrimeNumbers.push(value.split(",").map((item) => Number(item)));
}
depPrimeNumbers = depPrimeNumbers.map((depPrimeNumber) => depPrimeNumber.reduce((a, b) => a + b, 0));
for (let i = 0; i < depPrimeNumbers.length; i++) {
if (depPrimeNumbers[i] === 2) {
answer += 1;
continue;
}
let notPrimeNumber = false;
for (let j = 2; j <= Math.floor(Math.sqrt(depPrimeNumbers[i])); j++) {
if (depPrimeNumbers[i] % j === 0) {
notPrimeNumber = true;
break;
}
}
if (!notPrimeNumber) answer += 1;
}
return answer;
}