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

JavaScript로 배열 안의 짝수 요소 반복하기

이번 글에서는 JavaScript 함수를 작성하여, 주어진 배열 안에서 짝수를 바로 뒤에 한 번 더 반복해 삽입하는 방법을 알아보겠습니다.

문제 정의

예를 들어 다음과 같은 배열이 주어졌다고 가정해 보겠습니다.

const arr = [1, 2, 5, 6, 8];

이때 원하는 출력 결과는 다음과 같습니다. 짝수인 2, 6, 8이 각각 한 번씩 반복되어 삽입됩니다.

const output = [1, 2, 2, 5, 6, 6, 8, 8];

해결 접근 방식

핵심 아이디어는 배열의 끝에서부터 앞쪽으로 순회하면서 짝수를 만나면 같은 위치에 값을 복제해 삽입하는 것입니다.

역방향으로 순회하는 이유는 중요합니다. 만약 앞에서부터 순회하면서 splice()로 요소를 삽입하면 배열의 길이가 변하면서 인덱스가 밀려나, 일부 요소를 건너뛰거나 잘못 처리할 수 있습니다. 뒤에서부터 처리하면 이미 순회한 영역에는 영향을 주지 않으므로 안전하게 삽입할 수 있습니다.

구현 코드

const arr = [1, 2, 5, 6, 8];

const repeatEvenNumbers = arr => {
    let end = arr.length - 1;
    // 뒤에서부터 순회하며 인덱스 밀림 문제 방지
    for(let i = end; i > 0; i--){
        if(arr[i] % 2 === 0){
            // 현재 위치에 같은 값 삽입
            arr.splice(i, 0, arr[i]);
        }
    }
    return arr;
};

console.log(repeatEvenNumbers(arr));

코드 설명

  • end: 순회를 시작할 마지막 인덱스입니다.
  • arr[i] % 2 === 0: 나머지 연산자(%)를 사용해 해당 요소가 짝수인지 판별합니다.
  • arr.splice(i, 0, arr[i]): 기존 요소를 삭제하지 않고(삭제 개수 0), 인덱스 i 위치에 동일한 값을 삽입합니다.

실행 결과

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

[
    1, 2, 2, 5,
    6, 6, 8, 8
]

마무리

이처럼 splice() 메서드와 역방향 반복을 조합하면, 새로운 배열을 생성하지 않고도 원본 배열 내에서 짝수를 간단히 반복할 수 있습니다. 시간 복잡도는 O(n²)로, splice()가 삽입 시마다 뒤쪽 요소들을 이동시키기 때문입니다. 배열 크기가 매우 크다면 새 배열을 만들어 반환하는 방식(O(n))을 고려하는 것이 좋습니다.