[프로그래머스] Level 2 : 소수 찾기 (8일차)

kimjh96·2021년 10월 25일
0

Algorithm

목록 보기
8/49

문제설명

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

문제풀이

function solution(numbers) {
    var answer = 0;

    const splitNumbers = numbers.split('');
    let primeNumbers = [];
    
    const permutation = (arr, sNum) => {
        let result = [];

        if (sNum === 0) {
            return arr.map((item) => item);
        };

        arr.forEach((item, index) => {
            const fixNum = item;
            const restArr = arr.filter((child, childIndex) => index !== childIndex);
            const permArr = permutation(restArr, sNum - 1);
            const combine = permArr.map((child) => fixNum + child);
            result.push(...combine);
        });
        
        return result;
    };
    
    const isPrime = (number) => {
        if (number <= 1) return false;
        
        let i = 2;
        
        while (i < number) {
            if (number % i === 0) return false;
            i++;
        }

        return true;
    }
    
    for (let i = 0; i < splitNumbers.length; i++) {
        primeNumbers = [
            ...primeNumbers,
            ...permutation(splitNumbers, i)
        ];
    }
    
    primeNumbers = [...new Set(primeNumbers.map((item) => Number(item)))].filter((item) => item > 1);
    primeNumbers = primeNumbers.filter((item) => isPrime(item));

    answer = primeNumbers.length;
    
    return answer;
}

0개의 댓글

관련 채용 정보