문제 이해하기
숫자로 이루어진 배열을 입력받아, 원본 배열에서 인접한 두 요소씩 짝지어 그 합을 담은 새 배열을 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어, 입력 배열이 다음과 같다면 −
const arr = [3, 6, 3, 87, 3, 23, 2, 2, 6, 8];
출력 결과는 다음과 같아야 합니다 −
const output = [9, 90, 26, 4, 14];
결과 배열의 각 값은 원본 배열에서 두 개씩 묶은 요소들의 합입니다. 즉, 3+6=9, 3+87=90, 3+23=26, 2+2=4, 6+8=14가 됩니다.
해결 방법: 코드 예제
이 문제를 해결하는 코드는 다음과 같습니다 −
const arr = [3, 6, 3, 87, 3, 23, 2, 2, 6, 8];
const twiceSum = arr => {
const res = [];
for(let i = 0; i < arr.length; i += 2){
res.push(arr[i] + (arr[i+1] || 0));
};
return res;
};
console.log(twiceSum(arr));코드 동작 원리
코드의 핵심 로직을 단계별로 살펴보면 다음과 같습니다.
- 2칸씩 건너뛰는 반복문: for 루프의 인덱스 변수 i가 0부터 시작하여 매번 2씩 증가하므로, 배열을 두 요소 단위로 순회할 수 있습니다.
- 인접 요소 합산: 각 반복에서 현재 요소 arr[i]와 바로 다음 요소 arr[i+1]을 더한 값을 결과 배열 res에 push합니다.
- 홀수 길이 배열 처리: 배열 길이가 홀수라면 마지막 요소는 짝이 되는 다음 요소가 없어 undefined가 됩니다. 이때
(arr[i+1] || 0)표현식이 undefined를 0으로 대체해 주므로, 마지막 홀수 요소는 그대로 더해져 오류 없이 안전하게 동작합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다 −
[ 9, 90, 26, 4, 14 ]
이처럼 간단한 반복문 하나만으로 배열의 연속된 두 요소 합을 손쉽게 계산할 수 있습니다. 필요하다면 화살표 함수 대신 일반 함수로 작성하거나, reduce 같은 고차 함수를 활용하는 방식으로도 응용할 수 있습니다.