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

JavaScript로 배열의 인접 요소 쌍 중 최대 곱 구하기

이번 글에서는 양수와 음수를 모두 포함하는 숫자 배열을 입력받아, 인접한 두 요소의 곱 중 가장 큰 값을 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 이해하기

배열에서 서로 붙어 있는 두 요소(인접 요소)의 곱을 모두 계산한 뒤, 그중 최댓값을 찾는 것이 목표입니다.

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

const arr = [-23, 4, -3, 8, -12];

이 경우 각 인접 요소 쌍의 곱은 다음과 같습니다.

  • -23 × 4 = -92
  • 4 × (-3) = -12
  • -3 × 8 = -24
  • 8 × (-12) = -96

따라서 최대 곱은 -12이며, 해당하는 두 요소는 4와 -3입니다.

const output = -12;

해결 접근 방식

가장 효율적인 방법은 배열을 한 번만 순회하면서 현재 요소와 그다음 요소의 곱을 계산하고, 지금까지 발견한 최댓값과 비교하는 것입니다. 초기값은 안전한 정수 범위의 최솟값인 Number.MIN_SAFE_INTEGER로 설정하여 어떤 곱보다도 작게 만듭니다.

코드 구현

const arr = [-23, 4, -3, 8, -12];

const adjacentProduct = (arr = []) => {
    let res = Number.MIN_SAFE_INTEGER;
    for (let i = 0; i < arr.length - 1; i++) {
        const product = arr[i] * arr[i + 1];
        if (product > res) {
            res = product;
        }
    }
    return res;
};

console.log(adjacentProduct(arr));

코드 설명

  • res 변수는 최종 결과값을 저장하며, Number.MIN_SAFE_INTEGER로 초기화합니다.
  • 반복문은 마지막 요소 전까지 순회하므로 조건을 i < arr.length - 1로 설정해 불필요한 연산을 줄였습니다.
  • 각 반복에서 arr[i]arr[i + 1]의 곱을 계산하고, 기존 최댓값보다 크면 갱신합니다.
  • 모든 순회가 끝나면 최대 곱을 반환합니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력을 확인할 수 있습니다.

-12

시간 복잡도

배열을 한 번만 순회하므로 시간 복잡도는 O(n)이며, 추가 메모리 사용 없이 상수 공간 O(1)로 해결할 수 있습니다. 이는 배열의 길이가 커져도 효율적으로 동작한다는 의미입니다.