프로그래머스 문제 풀이 소수 만들기 (JS)

소수 만들기

문제
nums라는 배열이 파라미터로 주어질 때, 3개의 nums[i]를 더해 소수가 되는 경우의 수를 구하는 함수 solution을 만들기
풀이

function solution(nums) {
    const isPrime = function(n){
       for ( let j=2; j*j<=n; j++) {
           if(n%j===0) return false;
       }
        return true;
    }
    const result = combination(nums).filter((data)=>isPrime(data)).length;
    return result;
}
function combination(numArr){
    let temp = [];
    const f = (pre,curr) => {
        for(let i=0; i<curr.length; i++){
            const newArr =[...pre,curr[i]]
            if(newArr.length===3){
                let sum=0;
                for ( let i of newArr ){
                        sum+=i;
                    }
            temp.push(sum);
            }
            f(newArr,curr.slice(i+1));
        }
    }
 f([],numArr);
 return temp;
}

다른풀이 1

function isPrime(num){
    for ( let i = 2; i*i<=num; i++ ) {
        if(num%i===0) return false;
    }
    return true;
}
let answer = 0;
function combination(nums,arr,index,r,target) {
    if(r === 0){
//arr[i]는 nums의 Idx
        const sum = arr.reduce((a,b)=>a+nums[b],0);
        console.log(arr,sum);
        if(isPrime(sum)) answer++;
    }
    else if ( target === nums.length ) return;
    else {
    arr[index] = target;
    combination(nums,arr,index+1,r-1,target+1);
    combination(nums,arr,index,r,target+1);
    }
}
function solution(nums){
    const arr=[];
    combination(nums,arr,0,3,0);
    return answer;
}

다른풀이 2

function primecheck(n){
    for(var i=2;i<=Math.sqrt(n);i++){
        if(n%i == 0){
            return false;
        }
    }
    return true;    
}
function solution(nums){
    var cnt = 0;
    for(var i=0;i<nums.length-2;i++){
        for(var j=i+1;j<nums.length-1;j++){
            for(var w=j+1;w<nums.length;w++){
                    if(primecheck(nums[i]+nums[j]+nums[w])){
                        cnt++;
                    }
            }
        }
    }
    return cnt;
}

** 문제별로 전략적 접근. 알고리즘 성능관련 항상 고민하기

좋은 웹페이지 즐겨찾기