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

JavaScript로 숫자의 소수 자릿수 합계 구하기

문제 이해하기

이번 문제에서는 숫자를 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 함수는 입력된 숫자를 구성하는 각 자릿수 중에서 소수에 해당하는 값들만 골라 모두 더한 합계를 반환해야 합니다.

예를 들어, 입력 숫자가 다음과 같다고 가정해 보겠습니다.

const num = 67867852;

이때 기대되는 출력 결과는 다음과 같습니다.

const output = 21;

그 이유는 숫자 67867852를 구성하는 자릿수 중 소수는 7, 8을 제외한 7 + 7 + 5 + 2 = 21이기 때문입니다.

접근 방법

한 자리 숫자 중 소수는 2, 3, 5, 7뿐이므로, 이 네 개의 숫자만 확인하면 됩니다. 문제를 해결하는 절차는 다음과 같습니다.

  • 나머지 연산자(%)를 사용해 숫자의 마지막 자릿수를 하나씩 추출합니다.
  • 추출한 자릿수가 소수(2, 3, 5, 7)에 포함되는지 판별하고, 소수라면 합계 변수에 더합니다.
  • Math.floor()로 숫자를 10으로 나누어 자릿수를 하나씩 제거하며 반복합니다.
  • 숫자가 0이 되면 반복을 종료하고 최종 합계를 반환합니다.

예제 코드

const num = 67867852;
const sumPrimeDigits = (num) => {
    const primes = '2357';
    let sum = 0;
    while(num){
        const digit = num % 10;
        if(primes.includes('' + digit)){
            sum += digit;
        };
        num = Math.floor(num / 10);
    };
    return sum;
};
console.log(sumPrimeDigits(num));

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

21

코드 설명

코드의 동작 원리를 단계별로 살펴보겠습니다.

  • primes 문자열에는 한 자리 소수인 2, 3, 5, 7이 담겨 있습니다.
  • while 루프는 입력 숫자가 0이 될 때까지 매번 마지막 자릿수를 num % 10으로 추출합니다.
  • includes() 메서드를 활용해 현재 자릿수가 소수 목록에 있는지 확인합니다. 이때 '', digit처럼 템플릿 리터럴 또는 문자열 변환을 통해 비교합니다.
  • 소수라면 sum에 더하고, Math.floor(num / 10)으로 이미 확인한 자릿수를 제거합니다.

이 방식은 별도의 소수 판별 로직 없이 문자열 포함 여부만 검사하면 되기 때문에 코드가 간결하고 실행 속도도 빠릅니다. 시간 복잡도는 숫자의 자릿수 길이에 비례하여 O(log n)입니다.