문제 개요
정수로 이루어진 배열이 주어졌을 때, 인접한 두 요소 사이의 절대 차이 중 가장 큰 값을 찾는 것이 이번 문제의 목표입니다.
예를 들어 다음과 같은 입력 배열이 있다고 가정해 보겠습니다.
const arr = [2, 4, 1, 0];
이 경우 기대되는 출력값은 다음과 같습니다.
const output = 3;
그 이유는 배열에서 인접한 요소인 4와 1 사이의 절대 차이(|4 − 1| = 3)가 모든 인접 쌍 중에서 가장 크기 때문입니다.
해결 방법
배열의 각 인접 요소 쌍을 순회하면서 절대 차이를 계산하고, 그중 최댓값을 반환하면 됩니다. JavaScript에서는 slice()와 reduce() 메서드를 조합하면 반복문 없이도 간결하게 구현할 수 있습니다.
예제 코드
const arr = [2, 4, 1, 0];
const maximumDecreasing = (arr = []) => {
const res = arr.slice(1).reduce((acc, val, ind) => {
return Math.max(Math.abs(arr[ind] − val), acc);
}, 0);
return res;
};
console.log(maximumDecreasing(arr));
코드 설명
arr.slice(1): 첫 번째 요소를 제외한 새로운 배열을 만듭니다. 이렇게 하면 현재 요소(val)와 바로 앞의 요소(arr[ind])를 짝지어 비교할 수 있습니다.reduce(): 각 인접 요소 쌍의 절대 차이를 계산하면서, 지금까지 발견한 최댓값(acc)과 비교하여 더 큰 값을 계속 유지합니다.Math.abs(): 두 요소 사이의 절대 차이를 구합니다.Math.max(): 누적된 최댓값과 현재 계산된 차이 중 더 큰 값을 선택합니다.- 초기값이
0으로 설정되어 있으므로, 빈 배열이나 요소가 하나뿐인 배열에서도 오류 없이 안전하게 동작합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
3