문제 개요
숫자들로 이루어진 여러 개의 하위 배열을 포함하는 배열(2차원 배열)이 주어졌을 때, 새로운 배열의 각 요소가 해당 하위 배열에 있는 모든 숫자의 합계가 되도록 하는 함수를 작성해야 합니다.
예를 들어, 입력 배열이 다음과 같다면 −
const numbers = [ [1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12] ];
함수의 출력 결과는 다음과 같아야 합니다 −
const output = [10, 18, 50];
즉, 첫 번째 하위 배열의 합은 1+2+3+4 = 10, 두 번째는 5+6+7 = 18, 세 번째는 8+9+10+11+12 = 50이 됩니다.
해결 방법
이 문제는 자바스크립트의 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 먼저 하나의 배열 안에 있는 모든 숫자의 합을 구하는 헬퍼 함수를 정의하고, 바깥쪽 reduce()를 사용해 각 하위 배열의 합계를 결과 배열에 순서대로 추가합니다.
예제 코드
const numbers = [
[1, 2, 3, 4],
[5, 6, 7],
[8, 9, 10, 11, 12]
];
const sum = arr => arr.reduce((acc, val) => acc + val);
const sumSubArray = arr => {
return arr.reduce((acc, val) => {
const s = sum(val);
acc.push(s);
return acc;
}, []);
};
console.log(sumSubArray(numbers));코드 설명
sum 함수는 전달받은 배열의 모든 요소를 reduce()로 누적하여 합계를 반환합니다. sumSubArray 함수는 초기값으로 빈 배열 []을 설정한 뒤, 각 하위 배열을 순회하면서 그 합계를 계산하고 결과 배열에 push합니다. 최종적으로 하위 배열의 합계들만 모인 새로운 배열이 반환됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
[ 10, 18, 50 ]