JavaScript에서 숫자 하나를 매개변수로 받는 함수를 작성해야 한다고 가정해 봅시다. 이 함수는 1부터 입력값 num까지의 모든 자연수의 합을 반환해야 하며, 1과 num 자체도 합산에 포함되어야 합니다.
예를 들어, num이 다음과 같다면 −
const num = 5;
함수의 출력 결과는 다음과 같아야 합니다 −
const output = 15;
그 이유는 다음과 같습니다 −
1+2+3+4+5 = 15
반복문 대신 수학 공식 사용하기
이 문제는 for문이나 while문으로 1부터 num까지 차례대로 더하는 방식으로도 해결할 수 있지만, 그 경우 시간 복잡도가 O(n)이 되어 입력값이 커질수록 성능이 떨어집니다. 대신 잘 알려진 가우스 공식을 활용하면 단 한 번의 연산, 즉 O(1)의 시간 복잡도로 결과를 얻을 수 있습니다.
1부터 n까지의 자연수의 합 공식은 다음과 같습니다 −
n * (n + 1) / 2
예제 코드
위 공식을 적용한 코드는 다음과 같습니다 −
const num = 5;
const sumUpto = num => {
const res = (num * (num + 1)) / 2;
return res;
};
console.log(sumUpto(num));
console.log(sumUpto(7));
console.log(sumUpto(45));
console.log(sumUpto(2));
console.log(sumUpto(8));
console.log(sumUpto(99));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
15 28 1035 3 36 4950
정리
화살표 함수(arrow function)와 가우스 공식만 있으면 반복문 없이도 간결하고 빠르게 1부터 n까지의 자연수 합을 계산할 수 있습니다. 특히 큰 숫자를 다룰 때 성능상 이점이 크므로, 실무에서도 반복 합계 문제에는 이 공식을 우선적으로 고려하는 것이 좋습니다.