문제 정의
숫자로 이루어진 배열을 입력받아, 모든 인접한 두 요소의 합 중에서 가장 작은 값을 가지는 쌍을 하위 배열 형태로 반환하는 JavaScript 함수를 작성해야 합니다. 단, 배열의 길이가 2보다 작으면 false를 반환해야 합니다.
예시
입력 배열이 다음과 같다고 가정해 보겠습니다.
const arr = [41, 44, -12, 13, -23, 1, 5, -4, 2, 2];
여기서 쌍 [-23, 1]의 합은 -22로, 배열 내 모든 인접 요소 쌍 중 가장 작은 값입니다. 따라서 함수는 [-23, 1]을 반환해야 합니다.
구현 코드
const arr = [41, 44, -12, 13, -23, 1, 5, -4, 2, 2];
const leastSum = arr => {
if(arr.length <= 2){
return false;
};
const creds = arr.reduce((acc, val, ind) => {
let { smallest, startIndex } = acc;
const next = arr[ind+1];
if(!next){
return acc;
}
const sum = val + next;
if(sum < smallest){
startIndex = ind;
smallest = sum;
};
return { startIndex, smallest };
}, {
smallest: Infinity,
startIndex: -1
});
const { startIndex } = creds;
return [arr[startIndex], arr[startIndex + 1]];
};
console.log(leastSum(arr));코드 설명
- 초기 누적값 설정: 최솟값(
smallest)은Infinity, 시작 인덱스(startIndex)는-1로 초기화합니다. - 순회 및 비교:
reduce()메서드가 배열을 순회하면서 각 요소와 바로 다음 요소의 합을 계산합니다. 마지막 요소에는 다음 요소가 없으므로 건너뛰고, 계산된 합이 기존 최솟값보다 작으면startIndex와smallest를 갱신합니다. - 결과 반환: 순회가 끝나면 저장된
startIndex를 이용해 해당 위치의 두 요소를 배열로 묶어 반환합니다.
실행 결과
[-23, 1]