프로그래머스 LEVEL 2(소수 찾기)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-09-02

  • 해결 방법 :

    • 순열을 통해 중복되지 않는 모든 경우의 수 찾기
    • 찾아진 순열을 돌며 소수인지 판별
  • 회고 : -

  • 코드

    const getPermutations = (arr, num) => {
        const results = [];
        if (num === 1) return arr.map(v => [v]);
    
        arr.forEach((fixed, index, origin) => {
            const rest = [...origin.slice(0, index), ...origin.slice(index + 1)];
            const permutations = getPermutations(rest, num - 1);
            const attached = permutations.map(v => [fixed, ...v]);
            results.push(...attached);
        });
    
        return results;
    }
    
    const getAllPermutations = (arr) => {
        const results = [];
        arr.forEach((value, index, origin) => {
            results.push(...getPermutations(origin, index + 1));
        });
    
        return results;
    }
    
    const isPrimeNumber = (n) => {
        if(n == 1) return false;
        for(let i = 2; i < n; i++){
            if(n % i == 0) return false;
        }
        return true;
    }
    
    function solution(numbers) {
        var answer = 0;
        const permutations = [];
            
        numbers = numbers.split('');
        numbers = numbers.map((number) => {
            return Number(number);
        });
            
        for (const permutation of getAllPermutations(numbers)) {
            const temp = Number(permutation.join(''));
            permutations.includes(temp) || temp === 0 || temp === 1 ? null : permutations.push(temp);
        }
            
        for (const permutation of permutations) {
            isPrimeNumber(permutation) ? answer++ : null;
        }
            
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges