728x90
문제를 조금 직관적으로 풀어봤다.
1. 순열을 구하는 함수 활용
2. 소수인지 판별하는 함수 활용
이전에 재귀함수로 순열을 구했던게 기억나서 해당함수와 소수인지 판별하는 함수를 활용해서 문제를 해결해보았다.
const getCombinations = (ary, num) => {
const ret = [];
if(num === 1) return ary.map((el) => [el]);
ary.forEach((fixed, idx, ori) => {
const rest = ori.slice(idx+1);
const combinations = getCombinations(rest, num - 1);
const attached = combinations.map((combination) => [fixed, ...combination]);
ret.push(...attached);
});
return ret;
}
const isPrime = (n) => {
for (let i = 2; i <= ~~(n**0.5); i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
function solution(nums) {
return getCombinations(nums,3).reduce((a,c) => isPrime(c.reduce((a,c) => a+c,0)) ? a+1 : a ,0);
}
소수를 구할때 꼭 n까지가 아닌, n의 루트값까지만 판단해도 소수인지 아닌지 확인할 수 있다.
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 정수 내림차순으로 정렬하기 (0) | 2023.05.03 |
---|---|
[JS] 하샤드 수 (0) | 2023.05.02 |
[JS] 다트 게임 (0) | 2023.05.01 |
[JS] 완주하지 못한 선수 (0) | 2023.04.28 |
[JS] K번째 수 (0) | 2023.04.27 |