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

JavaScript에서 두 배열의 요소를 번갈아 병합하는 방법

문제 소개

두 개의 배열을 인수로 전달받아, 각 배열에서 요소를 하나씩 번갈아 가져와 새로운 배열 하나로 병합하는 JavaScript 함수를 작성해야 합니다.

예시

입력 배열이 다음과 같다고 가정해 보겠습니다.

const arr1 = [4, 3, 2, 5, 6, 8, 9];
const arr2 = [2, 1, 6, 8, 9, 4, 3];

이 경우 기대하는 출력 결과는 다음과 같습니다.

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

즉, 첫 번째 배열의 요소와 두 번째 배열의 요소가 한 개씩 교대로 배치된 형태입니다.

구현 코드

위 조건을 만족하는 함수의 코드는 다음과 같습니다.

const arr1 = [4, 3, 2, 5, 6, 8, 9];
const arr2 = [2, 1, 6, 8, 9, 4, 3];

const mergeAlternatively = (arr1, arr2) => {
  const res = [];
  for(let i = 0; i < arr1.length + arr2.length; i++){
    if(i % 2 === 0){
      res.push(arr1[i / 2]);
    }else{
      res.push(arr2[(i - 1) / 2]);
    }
  }
  return res;
};

console.log(mergeAlternatively(arr1, arr2));

출력 결과

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

[
  4, 2, 3, 1, 2, 6,
  5, 8, 6, 9, 8, 4,
  9, 3
]

코드 동작 원리

이 함수의 핵심은 반복문의 인덱스 i를 활용해 두 배열을 오가며 값을 꺼내는 것입니다.

  • i가 짝수일 때(0, 2, 4...)는 arr1[i / 2]를 사용해 첫 번째 배열의 요소를 순서대로 추가합니다.
  • i가 홀수일 때(1, 3, 5...)는 arr2[(i - 1) / 2]를 사용해 두 번째 배열의 요소를 순서대로 추가합니다.

반복문은 두 배열 길이의 합만큼 실행되므로, 최종적으로 모든 요소가 교대로 배치된 새로운 배열이 완성됩니다. 시간 복잡도는 O(n + m)(n, m은 각 배열의 길이)로 매우 효율적입니다.

다만 위 코드는 두 배열의 길이가 같거나 비슷할 때 가장 자연스럽게 동작하며, 길이가 크게 다른 배열에는 undefined 값이 포함될 수 있으므로 실무에서는 길이 차이를 처리하는 로직을 함께 고려하는 것이 좋습니다.