이 글에서는 숫자로 이루어진 배열을 입력받아, 그중 가장 큰 값과 가장 작은 값의 차이를 반환하는 함수를 작성하는 방법을 알아보겠습니다.
문제 접근 방식
배열을 한 번씩 순회하면서 Math.min()과 Math.max() 메서드를 사용해 최솟값과 최댓값을 갱신한 뒤, 마지막에 두 값의 차이를 반환하면 됩니다.
먼저 예제로 사용할 배열을 생성합니다.
const arr = [23, 54, 65, 76, 87, 87, 431, -6, 22, 4, -454];
구현 코드
배열의 첫 번째 요소로 최솟값과 최댓값을 초기화하고, 이후 요소들을 순회하며 값을 비교해 갱신하는 방식으로 구현할 수 있습니다.
const arr = [23, 54, 65, 76, 87, 87, 431, -6, 22, 4, -454];
const arrayDifference = (arr) => {
let min, max;
arr.forEach((num, index) => {
if (index === 0) {
// 첫 번째 요소로 min과 max 초기화
min = num;
max = num;
} else {
// 현재 요소와 비교하여 최솟값·최댓값 갱신
min = Math.min(num, min);
max = Math.max(num, max);
}
});
return max - min;
};
console.log(arrayDifference(arr));실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
885
더 간결한 대안
전개 연산자(spread operator)를 활용하면 코드를 훨씬 간단하게 만들 수 있습니다.
const arrayDifference = (arr) => Math.max(...arr) - Math.min(...arr); console.log(arrayDifference(arr)); // 885
다만 전개 연산자 방식은 배열의 크기가 매우 클 경우 스택 오버플로(최대 인자 개수 초과)가 발생할 수 있으므로, 대량의 데이터를 다룰 때는 앞서 소개한 반복문 방식이 더 안전합니다.