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

너겟·2022년 6월 11일
0
post-thumbnail

소수만들기

숫자 세개를 더해서 소수가 나올 경우의 수를 찾아보자
[링크텍스트](문제 풀러가기)

문제 설명

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

입출력 예

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

문제풀이

두 단계로 나눠보자.

  1. 첫번째, 소수를 찾아내는 알고리즘
    가장 효율적으로 소수를 찾을 수 있는 알고리즘은 그 수의 제곱근보다 작은 (2이상의) 숫자를 다 나눠보는 것이라 한다.

  2. 두번째, array 내에 있는 요소를 3개 골라 더해서 나올 수 있는 모든 케이스를 구하는 법
    for문을 3번 돌려서 모든 조합을 찾아내서 나열할거다.

이제 모든 조합의 수를 소수찾는 알고리즘에 넣어볼건데, 만약에 그 수의 제곱근보다 작은 (2이상의) 숫자를 다 나눠보는 과정에서 하나라도 0이 나오면 false라고 할거다. 그런데 만약 이걸 다 통과한다? >> 그럼 true다.

미리 만들어놓은 count에 true인 애들을 찾을 때마다 +1해줄거다.

function primenum(e) {
    for(let i=2;i<=Math.sqrt(e);i++){
        if(e%i == 0){
            return false;
        }         
    }
    return true;
}


function solution(nums) {
    let count=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++) {
                
                if (primenum(nums[i]+nums[j]+nums[k])) {
                    count++
                } ;
        }
    }
}return count
}

profile
꾸준하게 하는 법을 배우는 중입니다!

0개의 댓글