문제
양수와 음수가 섞여 있는 정수 배열을 입력받는 JavaScript 함수를 작성해야 합니다. 이 함수는 두 개의 요소를 가진 배열을 반환하며, 첫 번째 요소는 양수의 개수, 두 번째 요소는 음수들의 합계가 되어야 합니다.
예제 코드
다음은 위 문제를 해결하는 코드입니다 −
const arr = [1, 2, 1, -2, -4, 2, -6, 2, -4, 9];
const posNeg = (arr = []) => {
const creds = arr.reduce((acc, val) => {
let [count, sum] = acc;
if(val > 0){
count++;
}else if(val < 0){
sum += val;
};
return [count, sum];
}, [0, 0]);
return creds;
};
console.log(posNeg(arr));
출력 결과
[ 6, -16 ]
코드 설명
위 코드는 Array.prototype.reduce() 메서드를 활용해 배열을 단 한 번의 순회로 처리합니다. 동작 과정을 살펴보면 다음과 같습니다.
1. 초기값 설정
reduce()의 초기값으로 [0, 0]을 전달합니다. 첫 번째 요소는 양수의 개수(count)를, 두 번째 요소는 음수의 합계(sum)를 저장하는 용도입니다.
2. 조건 분기 처리
배열을 순회하면서 현재 값(val)이 0보다 크면 count를 1 증가시키고, 0보다 작으면 sum에 해당 값을 더합니다. 값이 정확히 0이라면 어떤 처리도 수행하지 않습니다.
3. 결과 반환
모든 요소의 순회가 끝나면 [count, sum] 형태의 배열을 그대로 반환합니다.
예제 배열 분석
입력 배열 [1, 2, 1, -2, -4, 2, -6, 2, -4, 9]를 기준으로 살펴보면:
- 양수: 1, 2, 1, 2, 2, 9 → 총 6개
- 음수: -2, -4, -6, -4 → 합계 -16
따라서 최종 출력은 [6, -16]이 됩니다. 이처럼 reduce()를 사용하면 별도의 반복문 없이 여러 통계 값을 깔끔하게 동시에 계산할 수 있습니다.