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

JavaScript로 배열에서 세 수의 최대 곱 구하기

숫자 배열을 유일한 인수로 받아, 배열 내 임의의 세 요소 중 곱이 가장 커지는 조합을 찾는 JavaScript 함수를 작성해야 합니다. 함수는 최종적으로 해당 세 요소의 곱을 반환해야 합니다.

예시

입력 배열이 다음과 같다면 −

const arr = [-10, 7, 29, 30, 5, -10, -70];

출력은 다음과 같아야 합니다 −

const output = 21000

그 이유는 세 숫자가 30, -10, -70이기 때문입니다. 음수끼리 곱하면 양수가 되므로, 가장 큰 양수인 30과 절댓값이 가장 큰 두 음수 -10, -70을 곱한 값이 최대 곱이 됩니다.

접근 방법

배열에는 음수 요소가 포함될 수도 있고, 실제로 포함되어 있을 가능성이 높습니다. 이런 경우 최대 곱은 아래 두 값 중 더 큰 값이 됩니다 −

min1 * min2 * max1   // 가장 작은 두 음수 × 가장 큰 양수
max1 * max2 * max3   // 가장 큰 세 양수의 곱

즉, 음수 두 개와 양수 하나의 조합이 양수 세 개의 조합보다 더 큰 곱을 만들 수 있으므로 두 경우를 모두 계산하여 비교해야 합니다.

구현 코드

다음은 위 로직을 구현한 코드입니다 −

const arr = [-10, 7, 29, 30, 5, -10, -70];
const threeProduct = (arr = []) => {
    const sorter = (a, b) => a - b;
    arr.sort(sorter);
    let pro1 = 1, pro2 = 1;
    let len = arr.length - 1;
    // 가장 큰 세 수의 곱 계산
    for (let i = len; i > len - 3; i--) {
        pro1 = pro1 * arr[i];
    };
    // 가장 작은 두 음수와 가장 큰 양수의 곱 계산
    pro2 = arr[0] * arr[1] * arr[len];
    return Math.max(pro1, pro2);
}
console.log(threeProduct(arr));

코드 동작 원리

먼저 배열을 오름차순으로 정렬합니다. 정렬된 배열에서 pro1은 마지막 세 요소(가장 큰 세 수)의 곱이고, pro2는 첫 번째·두 번째 요소(가장 작은 두 수, 즉 음수일 가능성이 높음)와 마지막 요소(가장 큰 수)의 곱입니다. 마지막으로 Math.max()를 사용해 두 값 중 더 큰 값을 반환합니다.

출력 결과

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

21000