[Lv.0] 홀수 vs 짝수

woodstock·2023년 11월 22일
0

코딩테스트

목록 보기
9/56
post-thumbnail

홀수 vs 짝수

문제설명

정수 리스트 num_list가 주어진다.

가장 첫 번째 원소를 1번 원소라고 할 때,
홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하고 만약 두 값이 같을 경우에는 그 값을 return한다.

이를 만족하는 함수 solution을 구현하는 문제이다.

문제 해결 방식

순차적 접근

  • for 루프로 배열 순회: 각 원소마다 홀수 번째인지 짝수 번째인지 판별하여 합계 계산.
  • 간단하고 직관적: 명확한 루프 구조로 각 원소 처리.

함수형 접근

  • reduce 사용: 배열을 한 번만 순회하며 홀수, 짝수 위치의 원소 합을 계산.
  • 코드 간결성: 추가 변수 없이 누적값을 관리, 보다 선언적인 코드 스타일.

풀이

풀이 1.

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;
    }
}

풀이 2.

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]을 전달하여 oddSumevenSum을 초기화한다.
  • 배열을 순회하면서 index에 따라 적절한 합계에 현재 요소의 값을 더한다.
  • reduce는 최종적으로 oddSum, evenSum 배열을 반환한다.
  • Math.max함수를 사용하여 두 합계 중 더 큰 값을 반환한다.

reduce 함수의 매개변수

reduce 함수는 기본적으로 두 개의 매개변수를 받는다.

1. 콜백 함수
reduce함수 내에서 사용되는 콜백 함수는 배열의 각 요소에 대해 실행되며, 최대 4개의 매개변수를 받을 수 있다.

  • accumulator (누적자): 축적되는 값.
    이전 콜백 호출의 반환값이 여기에 저장된다.
  • currentValue (현재 값, curr): 처리 중인 배열의 현재 요소.
  • currentIndex (현재 인덱스, index): 처리 중인 배열의 현재 요소의 인덱스.
  • array: reduce 함수가 호출된 원본 배열.

2. 초기값(선택적)
축적할 값의 초기상태를 정의한다.

이 풀이는 함수평 프로그래밍의 장점을 활용하며, 보다 선언적이고 간결한다.
reduce를 사용함으로써 별도의 루프를 작성할 필요가 없고, 코드의 의도가 명확해진다.

profile
해내는 사람

0개의 댓글