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

JavaScript 배열에서 연속된 양수 클러스터 개수 구하기

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

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

우리는 이 배열에서 연속된 비음수(양수 또는 0) 숫자들의 그룹, 즉 클러스터가 몇 개인지 세는 JavaScript 함수를 작성해야 합니다.

위 배열을 예로 들면, 인덱스 3의 값 0이 하나의 클러스터를 이루고(요소가 하나뿐이라도 하나의 그룹으로 간주합니다), 인덱스 9부터 배열 끝까지의 0, 1, 0이 두 번째 클러스터를 이룹니다.

따라서 이 배열에 대해 함수는 2를 반환해야 합니다.

해결 아이디어

핵심 로직은 간단합니다. 배열을 순회하면서 현재 요소가 0 이상이고, 바로 다음 요소가 음수이거나 존재하지 않는 경우(즉, 현재 요소가 해당 클러스터의 마지막 요소인 경우) 카운트를 1씩 증가시키면 됩니다.

예제 코드

다음은 reduce() 메서드를 활용한 전체 코드입니다.

const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];
const positiveClusters = arr => {
    return arr.reduce((acc, val, ind) => {
        if(val >= 0 && (arr[ind+1] < 0 || typeof arr[ind+1] === 'undefined')){
            acc++;
        };
        return acc;
    }, 0);
};
console.log(positiveClusters(arr));

코드 설명

  • reduce()는 초기값 0에서 시작하여 배열의 각 요소를 순회하며 누적값 acc를 관리합니다.
  • 현재 값 val0 이상인지 확인하여 비음수인지 판별합니다.
  • 동시에 다음 요소 arr[ind+1]이 음수이거나 undefined(배열의 끝)인지 검사합니다. 이 조건이 참이면 현재 요소가 하나의 클러스터가 끝나는 지점이므로 카운트를 증가시킵니다.

출력 결과

콘솔에 다음과 같은 결과가 출력됩니다.

2

이처럼 reduce()를 사용하면 별도의 반복문 없이도 간결하게 연속된 양수 클러스터의 개수를 계산할 수 있습니다.