Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트(JavaScript)로 배열 안의 소수 합계 구하기

이번 글에서는 숫자 배열을 입력받아 그중 소수(prime number)에 해당하는 값들만 골라 합계를 반환하는 자바스크립트 함수를 작성해 보겠습니다.

소수란 1과 자기 자신 외에는 약수를 가지지 않는 1보다 큰 자연수를 말합니다. 예를 들어 2, 3, 5, 7, 11처럼 오직 1과 자신으로만 나누어 떨어지는 수가 여기에 해당합니다.

문제 접근 방식

이 문제는 크게 두 단계로 나누어 해결할 수 있습니다.

  1. 소수 판별 함수 작성: 주어진 숫자가 소수인지 아닌지를 판별합니다.
  2. 합계 계산: 배열을 순회하면서 소수인 요소만 더합니다.

1단계: 소수 판별 함수 (isPrime)

소수 판별은 2부터 n-1까지의 숫자로 차례대로 나누어 보는 방식으로 구현할 수 있습니다. 중간에 한 번이라도 나누어 떨어지면 소수가 아니며, 끝까지 나누어 떨어지지 않으면 소수입니다. 단, 1은 소수가 아니므로 별도로 처리하고, 2는 가장 작은 소수이므로 즉시 true를 반환합니다.

2단계: 배열 순회 및 합산 (primeSum)

배열의 각 요소를 isPrime 함수로 검사한 뒤, 소수인 경우에만 누적 합계에 더하면 됩니다.

예제 코드

const arr = [43, 6, 6, 5, 54, 81, 71, 56, 8, 877, 4, 4];

const isPrime = n => {
    if (n === 1){
        return false;
    } else if(n === 2){
        return true;
    } else {
        for(let x = 2; x < n; x++){
            if(n % x === 0){
                return false;
            }
        }
        return true;
    }
};

const primeSum = arr => {
    let sum = 0;
    for(let i = 0; i < arr.length; i++){
        if(!isPrime(arr[i])){
            continue;
        }
        sum += arr[i];
    }
    return sum;
};

console.log(primeSum(arr));

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

996

결과 분석

예제 배열에서 소수에 해당하는 값은 43, 5, 71, 877 네 개입니다. 이들의 합은 43 + 5 + 71 + 877 = 996이므로, 함수가 정상적으로 동작함을 확인할 수 있습니다.

성능 최적화 팁

위 코드는 이해하기 쉽지만, 더 큰 숫자를 다룰 때는 나눗셈 검사 범위를 √n까지만 줄이면 효율을 크게 높일 수 있습니다. 어떤 수 n이 a × b 형태로 표현될 때 a와 b 중 하나는 반드시 √n 이하이기 때문에, √n까지 나누어 떨어지지 않으면 소수임을 확신할 수 있습니다.