알고리즘

[알고리즘]프로그래머스 Level 1 - 소수 만들기(Js)

로돌씨 2024. 3. 8. 19:27

기억에 남고 , 유용할 것 같은 문제여서 따로 포스팅 합니다.

 

문제 설명

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

 

제한 사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

 

3중 반복문을 이용하여 더해진 값의 결과가 소수인지 판별 후 소수라면 answer를 하나씩 증가시키는 구조

 

function solution(nums) {
    var answer = 0;
    //nums 에서 소수가 만들어지는 세가지의 수를 임의로 고름
    //그 경우의 수 만큼 result는 올라감
    
    //isPrime => 소수를 판별하게해줄수있는 공식
    //매개변수 숫자 n을 받음
    const isPrime = (n)=>{
        //Math.sqrt()은 n의 제곱근을 반환함
        for(let i = 2; i <= Math.sqrt(n); i++){
            //나머지가 0이라면 i로 나누어떨어지므로 소수가 아님 -> false;
            if(n % i === 0) return false;
        //아니라면 소수이므로 true
        }
        return true;
    }
    // 중복하여 더하면 안되므로 i + 1 , j+ 1을 해주어 각각의 요소를 더할 수 있게함
    for(let i = 0; i < nums.length; i ++){
        for(let j = i+1 ; j< nums.length; j ++){
            for(let k = j+1; k <nums.length; k ++){
                var sum = nums[i] + nums[j] + nums[k] ;
                //세가지를 더한 값 sum이 isPrime 함수에서 true가 된다면 answer 는 1씩 증가함
                if(isPrime(sum)){
                    answer ++ ;
                }
            }
        }
    }
    return answer;
}

 

소수인지 아닌지 구분하는 문제가 꽤 많았는데 이 방법을 이용하니 소수인지 아닌지 쉽게 판별이 가능하여 자주 , 유용하게 사용할 것 같다 !