Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 배열을 좌우 반으로 나눠 각 부분합의 곱 구하기


문제 소개

숫자로 이루어진 길이 N(N은 짝수)의 배열을 입력받아, 배열을 각각 N/2개의 요소를 가진 두 개의 부분 배열(왼쪽, 오른쪽)로 나눈 뒤, 각 부분 배열의 합을 구하고 그 두 값을 곱하는 JavaScript 함수를 작성해야 합니다.

예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.

const arr = [1, 2, 3, 4]

그렇다면 기대되는 출력 결과는 다음과 같습니다.

(1+2) * (3+4)
= 21

구현 코드

다음은 위 문제를 해결하는 전체 코드입니다.

const arr = [1, 2, 3, 4];
const subArrayProduct = arr => {
   const { length: l } = arr;
   const creds = arr.reduce((acc, val, ind) => {
      let { left, right } = acc;
      if(ind < l/2){
         left += val;
      }else{
         right += val;
      }
      return { left, right };
   }, {
      left: 0,
      right: 0
   });
   return creds.left * creds.right;
};
console.log(subArrayProduct(arr));

코드 동작 원리

이 코드는 reduce() 메서드를 활용하여 배열을 한 번만 순회하면서 누적 객체에 왼쪽(left)과 오른쪽(right) 합계를 동시에 저장합니다.

  • 먼저 배열의 전체 길이를 구한 뒤, 절반 지점(l/2)을 기준으로 삼습니다.
  • 현재 인덱스(ind)가 절반보다 작으면 해당 요소를 left에 더하고, 그렇지 않으면 right에 더합니다.
  • 순회가 끝나면 초기값으로 설정된 { left: 0, right: 0 } 객체에 각 부분 배열의 합이 저장됩니다.
  • 마지막으로 두 합을 곱하여 반환합니다.

이 방식은 배열을 실제로 분리하지 않고도 한 번의 순회(O(n))만으로 결과를 얻을 수 있어 매우 효율적입니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

21