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

JavaScript 인접 요소 최대 곱 알고리즘 구현하기

정수로 이루어진 배열이 주어졌을 때, 서로 인접한 두 요소의 곱이 가장 큰 쌍을 찾아 그 곱을 반환하는 문제는 코딩 테스트에서 자주 등장하는 기본적인 알고리즘입니다.

문제 정의

배열 내에서 이웃한 두 요소를 차례대로 곱한 값들 중 최댓값을 구하는 것이 목표입니다.

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

const arr = [3, 6, -2, -5, 7, 3];

이 경우 출력값은 21이 되어야 합니다. 그 이유는 [7, 3] 쌍의 곱(7 × 3 = 21)이 다른 어떤 인접 요소 쌍의 곱보다 크기 때문입니다.

예제 코드

다음은 위 문제를 해결하는 자바스크립트 코드입니다.

const arr = [3, 6, -2, -5, 7, 3];
const adjacentElementsProduct = (arr = []) => {
    let prod, ind;
    for (ind = 1; ind < arr.length; ind++) {
        if (ind === 1 || arr[ind - 1] * arr[ind] > prod) {
            prod = arr[ind - 1] * arr[ind];
        };
    };
    return prod;
};
console.log(adjacentElementsProduct(arr));

코드 동작 원리

이 알고리즘은 다음과 같은 단계로 동작합니다.

  • 인덱스 1부터 시작해 배열의 마지막 요소까지 순회합니다.
  • 각 위치에서 현재 요소(arr[ind])와 바로 앞 요소(arr[ind - 1])의 곱을 계산합니다.
  • 첫 번째 반복(ind === 1)이거나 새로 계산된 곱이 기존 최댓값(prod)보다 크면 prod를 갱신합니다.
  • 순회가 종료되면 누적된 최대 곱을 반환합니다.

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

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

21