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

JavaScript 배열에서 첫 번째 비연속 숫자의 인덱스 찾는 방법

배열을 입력받아 그 안에서 첫 번째로 연속성이 깨진 숫자(non-consecutive number)의 인덱스를 반환하는 함수를 작성해 보겠습니다.

여기서 배열의 모든 숫자는 공차가 1인 등차수열을 이룬다고 가정합니다. 예를 들어 [1, 2, 3, 4]처럼 각 숫자가 바로 앞 숫자보다 정확히 1씩 커지는 형태입니다. 만약 어떤 숫자가 이 규칙을 위반한다면(즉, 이전 숫자와의 차이가 1이 아니라면), 해당 숫자의 인덱스를 반환하면 됩니다.

반대로 배열의 모든 숫자가 완벽하게 연속적이라면 -1을 반환합니다.

구현 코드

배열을 한 번만 순회하면서 인접한 두 요소의 차이를 검사하는 방식으로 간단하게 해결할 수 있습니다.

const arr = [1,2,3,4,5,6,8,9,10];
const secondArr = [3,4,5,6,7,8,9,10,11,12,13,14,15];

const findException = (arr) => {
    // 인접한 두 숫자의 차이가 1이 아니면 연속성이 깨진 지점
    for(let i = 0; i < arr.length-1; i++){
        if(arr[i+1] - arr[i] !== 1){
            return i+1; // 연속성이 깨진 숫자의 인덱스 반환
        };
    };
    // 끝까지 검사했는데 문제가 없다면 -1 반환
    return -1;
};

console.log(findException(arr));
console.log(findException(secondArr));

실행 결과

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

6
-1

코드 설명

  • 첫 번째 배열 [1,2,3,4,5,6,8,9,10]: 인덱스 6의 값이 7이 아닌 8이므로, 6과 8 사이에서 연속성이 깨집니다. 따라서 6이 출력됩니다.
  • 두 번째 배열 [3,4,5,...,15]: 모든 숫자가 1씩 증가하는 완벽한 등차수열이므로 규칙을 위반하는 숫자가 없고, -1이 출력됩니다.

이 알고리즘은 배열을 단 한 번 순회하므로 시간 복잡도는 O(n)이며, 추가 메모리 사용 없이 동작하는 효율적인 해결책입니다.