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

JavaScript로 배열에서 연속된 음수 그룹 개수 구하기

JavaScript에서 숫자 배열을 다루다 보면 연속된 음수들이 몇 개의 그룹으로 이루어져 있는지 계산해야 하는 경우가 있습니다. 이번 글에서는 reduce() 메서드를 활용해 이 문제를 간결하게 해결하는 방법을 알아보겠습니다.

문제 상황

다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.

const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];

이 배열에서 연속된 음수들의 묶음(그룹)이 총 몇 개인지 세는 JavaScript 함수를 작성해야 합니다.

위 배열을 살펴보면 다음과 같습니다.

  • 첫 번째 그룹: 인덱스 0부터 2까지의 음수 (-1, -2, -1)
  • 두 번째 그룹: 인덱스 4부터 8까지의 음수 (-1, -2, -1, -2, -1)

즉, 이 배열에 대한 함수의 반환값은 2가 되어야 합니다.

해결 방법: reduce() 활용하기

배열의 reduce() 메서드를 사용하면 반복문 없이도 우아하게 이 문제를 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.

  1. 현재 요소가 음수인지 확인합니다.
  2. 현재 요소가 음수이면서 다음 요소가 0 이상(음수가 아님)이라면, 하나의 음수 그룹이 끝난 것이므로 카운트를 증가시킵니다.

코드 구현

const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];

const countNegativeGroup = arr => {
    return arr.reduce((acc, val, ind) => {
        if(val < 0 && arr[ind+1] >= 0){
            acc++;
        };
        return acc;
    }, 0);
};

console.log(countNegativeGroup(arr));

코드 설명

  • reduce(acc, val, ind): acc는 누적 카운트, val은 현재 요소, ind는 현재 인덱스입니다.
  • val < 0: 현재 값이 음수인지 검사합니다.
  • arr[ind+1] >= 0: 다음 값이 0 또는 양수인지 검사하여, 현재 음수가 그룹의 마지막 요소임을 판별합니다.
  • 초기값 0: 카운트가 0부터 시작되도록 설정합니다.

실행 결과

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

2

마무리

이처럼 reduce() 메서드와 간단한 조건문만으로 연속된 음수 그룹의 개수를 효율적으로 계산할 수 있습니다. 시간 복잡도는 O(n)으로, 배열을 한 번만 순회하기 때문에 성능 면에서도 매우 효율적입니다. 비슷한 방식으로 양수 그룹이나 특정 조건을 만족하는 연속 구간의 개수도 손쉽게 응용할 수 있습니다.