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

JavaScript로 배열에서 세 개의 연속된 동일 요소 확인하기


문제 정의

배열을 인수로 받아, 배열 내 어딘가에 세 개의 연속된 동일한 요소(즉, 같은 값을 가진 요소)가 존재하면 true를, 그렇지 않으면 false를 반환하는 checkThree()라는 JavaScript 함수를 작성해야 합니다.

접근 방법

이 문제는 배열을 단 한 번의 순회만으로 해결할 수 있습니다. 핵심 아이디어는 다음 두 가지 정보를 추적하는 것입니다.

  • 이전 요소(element): 직전에 확인한 배열 요소
  • 연속 횟수(count): 해당 요소가 지금까지 연속으로 나타난 횟수

순회 도중 어떤 요소가 이미 두 번 연속 등장했는데 현재 요소와 값이 같다면, 세 번째 연속 요소가 존재한다는 의미이므로 즉시 true를 반환하면 됩니다. 끝까지 조건이 충족되지 않으면 false를 반환합니다.

그럼 실제 코드를 살펴보겠습니다.

예제 코드

const arr = ["g", "z", "z", "v", "b", "b", "b"];
const checkThree = arr => {
    const prev = {
        element: null,
        count: 0
    };
    for(let i = 0; i < arr.length; i++){
        const { count, element } = prev;
        if(count === 2 && element === arr[i]){
            return true;
        };
        prev.count = element === arr[i] ? count + 1 : count;
        prev.element = arr[i];
    };
    return false;
};
console.log(checkThree(arr));
console.log(checkThree(["z", "g", "z", "z"]));

출력 결과

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

true
false

코드 설명

첫 번째 배열 ["g", "z", "z", "v", "b", "b", "b"]에서는 마지막에 "b"가 세 번 연속 등장하므로 true가 출력됩니다. 반면 두 번째 배열 ["z", "g", "z", "z"]에서는 "z"가 최대 두 번까지만 연속으로 나타나기 때문에 false가 반환됩니다.

이 알고리즘은 배열을 한 번만 순회하므로 시간 복잡도는 O(n)이며, 추가 메모리 사용량은 상수 수준(O(1))으로 매우 효율적입니다. 또한 prev 객체 하나로 상태를 관리하기 때문에 코드가 간결하고 가독성이 뛰어납니다.