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

JavaScript로 두 수 사이의 짝수 합계 구하기 (nm 여부와 관계없이)

이번 글에서는 두 개의 숫자 mn을 인수로 받아, 두 수 사이에 있는 모든 짝수의 합(두 수 포함)을 반환하는 함수를 작성해 보겠습니다.

문제 이해하기

예를 들어 다음과 같은 경우를 생각해 볼 수 있습니다.

m = 10, n = -4인 경우

이때 출력 결과는 다음과 같아야 합니다.

10 + 8 + 6 + 4 + 2 + 0 + (-2) + (-4) = 24

여기서 중요한 점은 m과 n의 크기 관계가 정해져 있지 않다는 것입니다. 즉, m이 n보다 클 수도 있고 작을 수도 있으며, 음수가 포함될 수도 있습니다.

접근 방법

모든 짝수를 하나씩 순회하며 더하는 대신, 수학 공식을 활용하면 훨씬 효율적입니다.

먼저 0부터 n까지의 짝수 합과 0부터 m까지의 짝수 합을 각각 구합니다. 그다음 m과 n 중 어느 쪽이 더 큰지 판별하여, 큰 수까지의 합에서 작은 수까지의 합을 뺀 뒤 작은 수를 다시 더해주면 됩니다. 마지막에 작은 수를 더해주는 이유는 두 수가 모두 포함되어야 하기 때문입니다.

활용 공식

0부터 N까지의 모든 짝수의 합은 다음 공식으로 구할 수 있습니다.

$$\frac{N\times(N+2)}{4}$$

이 공식을 활용하면 반복문 없이 O(1)의 시간 복잡도로 답을 구할 수 있습니다.

코드 구현

const sumEven = n => (n*(n+2))/4;
const evenSumBetween = (a, b) => {
    return a > b ? sumEven(a) - sumEven(b) + b : sumEven(b) - sumEven(a) + a;
};
console.log(evenSumBetween(-4, 10));
console.log(evenSumBetween(4, 16));
console.log(evenSumBetween(0, 10));
console.log(evenSumBetween(8, 8));
console.log(evenSumBetween(-4, 4));

실행 결과

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

24
70
30
8
0

정리

이처럼 등차수열의 합 공식을 활용하면, 두 수의 크기 관계나 부호에 상관없이 두 수 사이의 짝수 합을 반복문 없이 간단하고 빠르게 계산할 수 있습니다. 특히 범위가 매우 클 때 성능상 큰 이점을 얻을 수 있습니다.