[JS] 프로그래머스 소수 찾기

bepyan·2021년 4월 26일
1

알고리즘

목록 보기
8/16

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42839

코드

  1. 순열을 통해 구성되는 모든 수를 구한다. (1자리 부터 numbers.length자리 까지)
  2. Set을 통해 중복되는 수를 없앤다.
  3. Set에 있는 소수의 수를 구한다.
const permutation = (arr, selectNum) => {
    let result = [];
    if (selectNum === 1) return arr.map((v) => [v]);

    arr.forEach((v, idx, arr) => {
        const fixer = v;
        const restArr = arr.filter((_, index) => index !== idx);
        const permuationArr = permutation(restArr, selectNum - 1);
        const combineFixer = permuationArr.map((v) => [fixer, ...v]);
        result.push(...combineFixer);
    });
    return result;
}

function solution(numbers) {
    const arr = numbers.split("");
    const cands = []
    for (var i = 1; i <= numbers.length; i++)
        cands.push(...permutation(arr, i).map(v => Number(v.join(''))))

    return [...new Set(cands)].reduce((ac, v) => {
        if (v < 2) return ac;

        var isPrime = true;
        for (var i = 2; i <= Math.sqrt(v); i++)
            if (v % i === 0) {
                isPrime = false;
                break;
            }
        return isPrime ? ac + 1 : ac;
    }, 0);
}
profile
쿠키 공장 이전 중 🚛 쿠키 나누는 것을 좋아해요.

0개의 댓글