정수 리스트 num_list
가 주어진다.
가장 첫 번째 원소를 1번 원소라고 할 때,
홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return
하고 만약 두 값이 같을 경우에는 그 값을 return
한다.
이를 만족하는 함수 solution
을 구현하는 문제이다.
for
루프로 배열 순회: 각 원소마다 홀수 번째인지 짝수 번째인지 판별하여 합계 계산.reduce
사용: 배열을 한 번만 순회하며 홀수, 짝수 위치의 원소 합을 계산.function solution(num_list) {
let oddSum = 0;
let evenSum = 0;
for(let i = 0; i < num_list.length; i++) {
if(i % 2 === 0) {
oddSum += num_list[i];
} else {
evenSum += num_list[i];
}
}
if(evenSum == oddSum) {
return evenSum;
} else {
return (evenSum > oddSum) ? evenSum : oddSum;
}
}
function solution(num_list) {
const [oddSum, evenSum] = num_list.reduce(([odd, even], curr, index) => {
if(index % 2 === 0) {
even += curr;
} else {
odd += curr;
}
return [odd, even];
}, [0, 0]);
return Math.max(oddSum, evenSum);
}
reduce
함수는 누적 계산을 위해 사용된다.[0, 0]
을 전달하여 oddSum
과 evenSum
을 초기화한다.index
에 따라 적절한 합계에 현재 요소의 값을 더한다.reduce
는 최종적으로 oddSum, evenSum
배열을 반환한다.Math.max
함수를 사용하여 두 합계 중 더 큰 값을 반환한다.reduce
함수는 기본적으로 두 개의 매개변수를 받는다.
1. 콜백 함수
reduce
함수 내에서 사용되는 콜백 함수는 배열의 각 요소에 대해 실행되며, 최대 4개의 매개변수를 받을 수 있다.
reduce
함수가 호출된 원본 배열.2. 초기값(선택적)
축적할 값의 초기상태를 정의한다.
이 풀이는 함수평 프로그래밍의 장점을 활용하며, 보다 선언적이고 간결한다.
reduce
를 사용함으로써 별도의 루프를 작성할 필요가 없고, 코드의 의도가 명확해진다.