자연수 n 하나만을 입력으로 받아 다음 작업을 수행하는 JavaScript 함수를 작성해야 합니다.
- 처음 n개의 자연수에 대한 제곱의 합(sum of squares)을 계산합니다.
- 처음 n개의 자연수의 합의 제곱(square of sums)을 계산합니다.
- 두 값의 절댓값 차이를 반환합니다.
예시로 살펴보기
n = 5라고 가정해 보겠습니다.
제곱의 합 = 1² + 2² + 3² + 4² + 5² = 1 + 4 + 9 + 16 + 25 = 55 합의 제곱 = (1 + 2 + 3 + 4 + 5)² = 15 × 15 = 225
따라서 최종 출력은 225 − 55 = 170이 됩니다.
구현 코드
이 문제를 해결하는 코드는 다음과 같습니다.
const squareDifference = (num = 1) => {
let x = 0;
let y = 0;
let i = 0;
let j = 0;
// 제곱의 합을 계산하는 함수
(function sumOfSquares() {
while (i <= num) {
x += Math.pow(i, 2);
i++;
}
return x;
}());
// 합의 제곱을 계산하는 함수
(function squareOfSums() {
while (j <= num) {
y += j;
j++;
}
y = Math.pow(y, 2);
return y;
}());
// 두 값의 절댓값 차이를 반환
return Math.abs(y - x);
};
console.log(squareDifference(1));
console.log(squareDifference(5));
console.log(squareDifference(10));
console.log(squareDifference(15));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
0 170 2640 13160
참고: 수학 공식으로 더 빠르게 계산하기
위 코드는 반복문을 사용해 O(n)의 시간 복잡도를 가지지만, 잘 알려진 수학 공식을 활용하면 반복 없이 O(1)로 즉시 계산할 수 있습니다.
- 1부터 n까지의 합: n(n+1) / 2
- 1부터 n까지 제곱의 합: n(n+1)(2n+1) / 6
이 공식들을 적용하면 n의 값이 매우 커지더라도 성능 저하 없이 동일한 결과를 얻을 수 있으므로, 실무나 코딩 테스트에서는 공식 기반 구현을 권장합니다.