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

자바스크립트 배열에서 최댓값과 최솟값의 차이 구하기

숫자로 이루어진 배열을 입력받아, 그중 가장 큰 값(최댓값)가장 작은 값(최솟값)을 찾아 두 값의 차이를 반환하는 자바스크립트 함수를 작성해야 합니다.

해결 방법

자바스크립트에는 각각 최댓값과 최솟값을 구할 수 있는 내장 메서드인 Math.max()Math.min()이 있습니다. 전개 연산자(...)를 사용하면 배열의 요소들을 이 메서드들에 개별 인수로 쉽게 전달할 수 있습니다.

최댓값과 최솟값을 구한 뒤에는 두 값을 빼주기만 하면 됩니다.

예제 코드

const arr = [4, 6, 3, 1, 5, 8, 9, 3, 4];

const difference = (arr = []) => {
    const highest = Math.max(...arr); // 최댓값 구하기
    const lowest = Math.min(...arr);  // 최솟값 구하기
    return highest - lowest;
};

console.log(difference(arr));

실행 결과

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

8

코드 설명

  • 배열 [4, 6, 3, 1, 5, 8, 9, 3, 4]에서 최댓값은 9, 최솟값은 1입니다.
  • 따라서 차이는 9 - 1 = 8이 됩니다.

참고: reduce()를 활용한 대안

전개 연산자 대신 reduce() 메서드를 사용하여 같은 결과를 얻을 수도 있습니다. 배열의 길이가 매우 클 경우 전개 연산자가 스택 오버플로우를 일으킬 수 있으므로, 이 방법이 더 안전합니다.

const difference = (arr = []) => {
    let highest = arr[0];
    let lowest = arr[0];
    for (const num of arr) {
        if (num > highest) highest = num;
        if (num < lowest) lowest = num;
    }
    return highest - lowest;
};

두 방법 모두 시간 복잡도는 O(n)으로 동일하지만, 일반적인 경우에는 코드가 간결한 Math.max()/Math.min() 방식을 사용하는 것이 좋습니다.