본문 바로가기
💻JavaScript/코딩테스트

Prime Number(소수 만들기)

by 영진학생 2025. 3. 12.

문제 설명

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


제한 조건

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

📄 문제

function solution(nums) {
    var answer = -1;
    
    return answer;
}

💻 공부 후 코드

// 소수를 구할 함수를 만든다.
// 2이하일땐 false, 2부터 n의 제곱근까지 n을 인덱스로 나누었을때 나눠지면 false
// 경우의 수 초기값 설정
// 3중 반복문으로 배열의 3가지 숫자를 더할수 있는 모든 경우의 수를 구하고
// 그 합계들을 소수를 구할수있는 함수에 넣어 true면 경우의 수를 증가
// 경우의 수를 반환한다.
const isPrimeNumber = (n) => {
    if (n < 2) return false;
    for (let i = 2; i <= Math.sqrt(n); i++) {
        if (n % 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++) {
                let sum = nums[i] + nums[j] + nums[k];
                if (isPrimeNumber(sum)) count++;
            }
        }
    }
    return count;
}

 

📚 배운 점

소수의 조건

  • 2보다 크다.
  • For loop 에서 2부터 n의 제곱근 까지 반복할 때 n % i === 0 이면 소수가 아니다.

 

모든 경우의 수

  • 3중 반복문을 사용할 땐 index의 최대 범위를 안쪽에서 부터 -1씩 줄여 나가야한다.