문제 소개
이번 글에서는 두 개의 숫자로 이루어진 범위 배열을 인자로 받아, 해당 범위에 속한 모든 숫자의 세제곱 값을 합산하여 반환하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 범위가 [4, 11]이라면, 4부터 11까지 각 숫자를 세제곱한 뒤(4³ + 5³ + ... + 11³) 그 전체 합계를 구해야 합니다.
예제 코드
다음은 문제를 해결하는 JavaScript 코드입니다 −
const range = [4, 11];
const sumCubes = ([l, h]) => {
const findCube = num => num * num * num;
let sum = 0;
for(let i = l; i <= h; i++){
sum += findCube(i);
};
return sum;
};
console.log(sumCubes(range));출력 결과
4320
코드 동작 원리
코드가 어떻게 작동하는지 단계별로 살펴보겠습니다.
1. 매개변수 구조 분해 할당
화살표 함수의 매개변수 자리에서 ([l, h])와 같이 배열 구조 분해 할당을 사용하여, 범위 배열의 첫 번째 요소는 하한값 l, 두 번째 요소는 상한값 h로 바로 추출합니다.
2. 세제곱 계산 헬퍼 함수
findCube는 전달받은 숫자를 세 번 곱하여 세제곱 값을 반환하는 간단한 화살표 함수입니다.
3. 반복문을 통한 누적 합산
for 루프가 하한값 l부터 상한값 h까지 순차적으로 순회하며, 각 숫자의 세제곱을 sum 변수에 더합니다. 마지막으로 누적된 합계를 반환합니다.
대안: reduce 메서드 활용하기
반복문 대신 배열과 reduce 메서드를 사용하면 더 선언적인 스타일로 같은 결과를 얻을 수 있습니다.
const sumCubesReduce = ([l, h]) => {
const nums = Array.from({ length: h - l + 1 }, (_, i) => l + i);
return nums.reduce((acc, num) => acc + num ** 3, 0);
};
console.log(sumCubesReduce([4, 11])); // 4320Array.from으로 범위 내 숫자들을 담은 배열을 생성한 뒤, reduce와 거듭제곱 연산자(**)를 조합해 세제곱의 합을 깔끔하게 계산할 수 있습니다.