FrontEnd/프로그래머스

[JS] 소수만들기

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