[프로그래머스] 소수 찾기(level2) - javascript

김지원·2022년 2월 21일
0

coding-test

목록 보기
25/25
post-thumbnail
post-custom-banner

📖 문제링크

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

문제 설명

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

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

👨‍💻 문제풀이

필자가 푼 문제풀이

function combination(numbers, selectNum) {
    const results = [];
    if (selectNum === 1) return numbers.map((el) => [el]); 
    
    numbers.forEach((fixed, idx, origin) => {
        const rest = [...origin.slice(0, idx), ...origin.slice(idx + 1)];
        const combinations = combination(rest, selectNum - 1); 
        const attached = combinations.map((el) => [fixed, ...el]); 
        results.push(...attached); 
    });
    return results;
}

function findPrime(num) {
    if( num < 2) return false;
        for (var i =2; i <= num / 2 ; i++) {
            if( num % i === 0) return false;
        }
        return true;
}

function solution(numbers) {
    const result = [];
    let answer = 0;
    let num = numbers.split("").map((x) => Number(x));
    
    for (let i = 1; i <= num.length; i++) {
        result.push(...combination(num, i));
    }
    
    let set = [...new Set(result.flatMap(el=>Number(el.join(""))))];
    
    for(let el of set){
        if(findPrime(el)) answer++    
    }
    
    return answer;
}

이 문제는 순열을 이용해 먼저 경우의 수를 구한 후 set을 이용해 숫자들을 배열에서 문자열로 바꿔주었다.

그다음 소수임을 판단하는 findPrime이란 함수를 만들어 소수를 판단하여 결과값을 반환하였다.

2022.02.21

profile
backend-developer
post-custom-banner

0개의 댓글