숫자로 이루어진 배열을 입력받아, 그중 가장 큰 값(최댓값)과 가장 작은 값(최솟값)을 찾아 두 값의 차이를 반환하는 자바스크립트 함수를 작성해야 합니다.
해결 방법
자바스크립트에는 각각 최댓값과 최솟값을 구할 수 있는 내장 메서드인 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() 방식을 사용하는 것이 좋습니다.