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

자바스크립트로 엄격하게 증가 또는 감소하는 배열 판별하기

수학에서 엄격하게 증가하는 함수(strictly increasing function)란 그래프에 표시되는 값이 끊임없이 증가하기만 하는 함수를 의미합니다. 마찬가지로 엄격하게 감소하는 함수(strictly decreasing function)는 값이 계속해서 감소하기만 하는 함수를 말합니다.

이 개념을 배열에 적용해 보겠습니다. 숫자 배열을 인자로 받아, 배열의 요소들이 처음부터 끝까지 한 방향으로만 증가하거나 감소하는 경우 true를 반환하고, 그렇지 않다면 false를 반환하는 자바스크립트 함수를 작성해야 합니다.

예제

다음은 이를 구현한 코드입니다 −

const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const arr2 = [12, 45, 67, 89, 123, 144, 2656, 5657];
const sameSlope = (a, b, c) => (b - a < 0 && c - b < 0) || (b - a > 0 && c - b > 0);
const increasingOrDecreasing = (arr = []) => {
    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));

출력

콘솔에 출력되는 결과는 다음과 같습니다 −

false
true

코드 동작 원리

핵심 역할을 하는 sameSlope 함수는 연속된 세 요소 a, b, c를 받아 b - ac - b의 부호가 서로 같은지 확인합니다. 두 차이가 모두 양수라면 증가 추세, 모두 음수라면 감소 추세에 해당합니다.

increasingOrDecreasing 함수는 배열의 길이가 2 이하일 경우 비교 대상이 없으므로 항상 조건을 만족한다고 보고 true를 반환합니다. 그 외에는 배열을 순회하며 모든 인접 요소 쌍의 기울기 부호가 일관되게 유지되는지 검사하고, 중간에 한 번이라도 증가와 감소가 뒤섞이면 즉시 false를 반환합니다.

첫 번째 배열 arr은 45에서 6으로 값이 급감했다가 다시 상승하는 구간이 있어 단조성이 깨지므로 false가 출력됩니다. 반면 두 번째 배열 arr2는 처음부터 끝까지 계속 증가만 하기 때문에 true가 출력됩니다.