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

JavaScript로 n 이하의 모든 배수 합 구하기

문제 소개

이번 글에서는 첫 번째 인수로 숫자 n을 받고, 그 뒤로 임의 개수의 숫자 인수를 추가로 전달받는 JavaScript 함수를 작성해 보겠습니다.

함수의 목표는 1부터 n까지의 숫자 중에서, 두 번째 인수 이후로 지정된 숫자들 중 하나라도 나누어 떨어지는 모든 수의 합을 구하는 것입니다.

예를 들어 함수를 다음과 같이 호출했다고 가정해 보겠습니다.

sumMultiples(15, 2, 3);

그렇다면 기대하는 출력 결과는 다음과 같습니다.

const output = 83;

그 이유는 1부터 15 사이에서 2 또는 3으로 나누어 떨어지는 숫자들이 다음과 같기 때문입니다.

2, 3, 4, 6, 8, 9, 10, 12, 14, 15

이 숫자들을 모두 더하면 2 + 3 + 4 + 6 + 8 + 9 + 10 + 12 + 14 + 15 = 83이 됩니다.

구현 코드

이 문제를 해결하는 코드는 다음과 같습니다.

const num = 15;
const sumMultiple = (num, ...arr) => {
    const dividesAny = num => arr.some(el => num % el === 0);
    let sum = 0;
    while (num) {
        if (dividesAny(num)) {
            sum += num;
        };
        num--;
    };
    return sum;
};
console.log(sumMultiple(num, 2, 3));

코드 설명

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

  • 나머지 매개변수(...arr): 화살표 함수의 두 번째 인수부터 들어오는 값들을 배열 형태로 한꺼번에 받습니다. 덕분에 배수 판정 기준이 되는 숫자를 몇 개든 유연하게 전달할 수 있습니다.
  • Array.prototype.some(): dividesAny 함수는 arr 배열의 요소 중 하나라도 num을 나누어 떨어지게 하는지(num % el === 0) 검사하여 true 또는 false를 반환합니다.
  • while 반복문: num부터 1까지 거꾸로 순회하면서, 조건에 맞는 숫자만 sum 변수에 누적합니다. num이 0이 되면 반복이 종료됩니다.

출력 결과

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

83

이처럼 나머지 매개변수와 some() 메서드를 활용하면, 배수 판정 기준이 되는 숫자의 개수와 관계없이 간결하고 확장성 있는 코드로 문제를 해결할 수 있습니다.