https://programmers.co.kr/learn/courses/30/lessons/12977
- 배열의 index를 3개의 조합인 모든 경우의 수를 구해 모든 경우의 수의 조합으로 덧셈한다.
- 덧셈의 결과값이 소수면 answer값에 1을 더한다.
- 최종적으로 모든 경우의 수 중 소수가 몇 개 인지를 answer의 값을 통해 알 수 있게 한다.
function solution(nums) {
var answer = 0;
var tmp = nums.map((val,index)=>index);
var arr = getCombinations(tmp,3);
for(var i = 0; i < arr.length; i++){
var sum = 0;
for(var j = 0; j < arr[i].length; j++){
sum += nums[arr[i][j]];
}
if(prime(sum))
answer++;
}
return answer;
}
//조합 알고리즘
function getCombinations(arr, selectNumber) {
var results = [];
if (selectNumber === 1) return arr.map((value) => [value]);
arr.forEach((fixed, index, origin) => {
var rest = origin.slice(index + 1);
var combinations = getCombinations(rest, selectNumber - 1);
var attached = combinations.map((combination) => [fixed, ...combination]);
results.push(...attached);
});
return results;
}
//소수면 true 아니면 false 반환하는 함수
function prime(num){
var cnt = 0;
if(num > 1){
for(var i = 1; i <= num; i++){
if(num%i == 0)
cnt++;
if(cnt > 2)
return false;
}
if(cnt <= 2)
return true;
}else
return false;
}