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

JavaScript에서 배열의 기울기 판별하기 – 단조 증가·감소 여부 확인 함수

숫자 배열을 인자로 받아, 해당 배열이 단조 증가(엄격히 증가)하거나 단조 감소(엄격히 감소)하는 경우에는 true를 반환하고, 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.

수학적 배경

수학에서 엄격히 증가하는 함수(strictly increasing function)란 그래프로 나타냈을 때 값이 항상 계속 증가만 하는 함수를 의미합니다. 마찬가지로 엄격히 감소하는 함수(strictly decreasing function)는 그래프의 값이 항상 계속 감소만 하는 함수입니다.

즉, 배열의 인접한 세 요소씩 비교하여 기울기(증감 방향)가 일관되게 유지되는지 검사하면 됩니다.

구현 예제

이를 구현한 코드는 다음과 같습니다.

const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const arr2 = [12, 45, 67, 89, 123, 144, 2656, 5657];

// 세 점 (a, b, c)의 기울기 부호가 같은지 확인하는 함수
const sameSlope = (a, b, c) => (b - a < 0 && c - b < 0) || (b - a > 0 && c - b > 0);

const increasingOrDecreasing = (arr = []) => {
    // 요소가 2개 이하라면 항상 true
    if(arr.length <= 2){
        return true;
    };
    // 인접한 세 요소씩 순회하며 기울기 일관성 검사
    for(let i = 1; i < arr.length - 1; i++){
        if(sameSlope(arr[i-1], arr[i], arr[i+1])){
            continue;
        };
        return false;
    };
    return true;
};

console.log(increasingOrDecreasing(arr));
console.log(increasingOrDecreasing(arr2));

코드 설명

sameSlope 함수는 연속된 세 요소 a, b, c에 대해 (b − a)와 (c − b)의 부호가 동일한지, 즉 두 구간의 기울기가 같은 방향인지를 판별합니다.

increasingOrDecreasing 함수는 배열 전체를 한 번 순회하며(O(n)) 모든 구간에서 기울기 방향이 일치하는지 확인합니다. 요소가 2개 이하인 배열은 비교 대상이 없으므로 항상 true를 반환합니다.

실행 결과

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

false
true

첫 번째 배열은 중간에 값이 오르내리기를 반복하고, 23이 두 번 연속 등장해 엄격한 증가나 감소가 아니므로 false가 출력됩니다. 반면 두 번째 배열은 처음부터 끝까지 값이 계속 증가하므로 true가 출력됩니다.