프로그래머스 Level 1 - 소수만들기

크롱·2023년 11월 7일
0

코딩테스트

목록 보기
46/61

내 풀이

소수여서 약수 배열의 length가 2 면 반환하는걸로했는데, 그렇게되면
소수가 엄청 큰 수일때 그 수를 다 반복하며 돌아야하므로 매우 비효율적이다.. 밑에 다른풀이를 참고하면, 2부터 돌음. 제곱근전까지! 효율적이다. 2부터 돌아서 만약 나머지가 0이면 바로 false를 반환한다.

function solution(nums) {
    var answer = 0

    for(let i=0;i<nums.length-2;i++){
        for(let j=i+1;j<nums.length-1;j++){
            for(let k=j+1;k<nums.length;k++){
            // answer.push(nums[i],nums[j],nums[k],[i,j,k])
             let 소수=nums[i]+nums[j]+nums[k]
             console.log(nums[i]+nums[j]+nums[k])
             let 약수=[]
             for(let l=1;l<=소수;l++){
                 if(소수%l===0){
                     약수.push(l)
                 }
             }
                if(약수.length===2){
                    answer=answer+1

                }
            }
        }
    }



    return answer;

}

다른풀이

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;
}
profile
👩‍💻안녕하세요🌞

0개의 댓글