주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
function solution(nums) {
const getCombinations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((el) => [el]);
arr.forEach((fixed, index, origin) => {
const rest = origin.slice(index + 1);
const combinations = getCombinations(rest, selectNumber - 1);
const attached = combinations.map((el) => [fixed, ...el]);
results.push(...attached);
});
return results;
}
var sums = getCombinations(nums,3).map(function(x){
let sum=0;
for(var i=0; i<x.length; i++){
sum += x[i];
}
return sum;
});
return sums.filter(function (x){
for(var i=2; i<x; i++){
if(x%i === 0){
return false;
}
}
return true;
}).length;
}
전체 로직)
1. 배열에서 서로다른 3개를 뽑아 배열에 넣는다.
2. 뽑아놓은 배열에서 서로다른 3개를 더한다.
3. 더한 값들 중 소수에 해당하는 것만 거른 배열의 길이를 리턴한다.
1번 과정은 getCombinations 조합 함수를 이용하였다. 위 함수는 내가 조합에 대해 공부할 때 다른분이 짜 놓은
코드를 가지고 있다 써먹었다.
2번 과정은 바로 변수 sums에 getCombinations로 리턴받은 조합배열을 map 메소드를 이용하여 서로 다른 수를
더한 값을 가진 배열을 리턴받았다.
3번 과정은 바로 sums 배열에 filter 메소드를 적용하여 약수인 요소만 true를 리턴하게 하여 약수만 포함된
배열을 리턴하게 하였고 이 배열의 길이를 최종적으로 리턴하여 알고리즘을 해결하였다.