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

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

숫자로 이루어진 배열을 다룰 때, 연속된 수열 중간에 끊긴 지점을 찾아야 하는 경우가 종종 있습니다. 이번 글에서는 배열에서 이전 요소의 자연스러운 연속값(+1)이 아닌 첫 번째 숫자를 찾아 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 정의

우리가 작성해야 할 함수는 숫자 배열을 인수로 받습니다. 함수의 목표는 다음과 같습니다.

  • 배열을 순회하면서 각 요소가 바로 앞 요소보다 정확히 1만큼 큰지 확인합니다.
  • 이 조건을 만족하지 않는, 즉 앞 요소 + 1이 아닌 첫 번째 요소를 반환합니다.
  • 배열 전체가 완벽하게 연속적이라면 null을 반환합니다.

예를 들어 [1, 2, 3, 4, 6, 7, 8]이라는 배열이 있다면, 4 다음에 나오는 6은 앞 요소보다 1이 아니라 2만큼 크므로 6이 결과가 됩니다.

구현 코드

다음은 위 문제를 해결하는 JavaScript 코드입니다.

const arr = [1, 2, 3, 4, 6, 7, 8];

const findFirstNonConsecutive = (arr = []) => {
    for(let i = 0; i < arr.length - 1; i++){
        const el = arr[i];
        const next = arr[i + 1];
        if(next - el !== 1){
            return next;
        };
    };
    return null;
};

console.log(findFirstNonConsecutive(arr));

코드 동작 원리

코드의 핵심 로직을 단계별로 살펴보겠습니다.

  1. 반복 범위 설정: 마지막 요소에는 '다음 요소'가 존재하지 않으므로, 반복문은 arr.length - 1까지 실행됩니다.
  2. 현재 요소와 다음 요소 비교: 변수 el에 현재 요소를, next에 바로 뒤의 요소를 저장합니다.
  3. 차이 검사: next - el !== 1 조건으로 두 요소의 차이가 1이 아닌지 확인합니다. 차이가 1이 아니라면 연속성이 깨진 것이므로 next를 즉시 반환합니다.
  4. 연속적인 경우 처리: 모든 요소가 연속적이라면 반복문이 종료된 후 null을 반환하여 예외 상황을 안전하게 처리합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

6

배열 [1, 2, 3, 4, 6, 7, 8]에서 4와 6 사이에 연속성이 깨져 있으므로, 함수는 첫 번째 비연속 숫자인 6을 올바르게 반환합니다.

마무리

이처럼 단순한 선형 탐색(O(n))만으로도 배열 내 연속성이 깨진 첫 번째 지점을 효율적으로 찾을 수 있습니다. 시간 복잡도는 O(n)이며, 공간 복잡도는 O(1)로 추가 메모리 사용 없이 동작하기 때문에 실무에서도 충분히 활용할 수 있는 패턴입니다.