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

JavaScript로 배열의 양 끝 요소를 쌍으로 묶는 방법

이번 글에서는 숫자 또는 문자열로 이루어진 배열을 입력받아, 배열의 앞쪽 n번째 요소와 뒤쪽 n번째 요소를 하나의 쌍으로 묶은 새로운 2차원 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.

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

const arr = [1, 2, 3, 4, 5, 6];

그렇다면 기대하는 출력 결과는 다음과 같습니다.

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

첫 번째 요소와 마지막 요소, 두 번째 요소와 뒤에서 두 번째 요소가 서로 짝을 이루는 방식입니다. 그럼 실제 구현 방법을 살펴보겠습니다.

구현 방법

핵심 아이디어는 간단합니다. 배열을 절반까지만 순회하면서, 인덱스 i에 있는 요소와 (배열 길이 − 1 − i) 인덱스에 있는 요소를 함께 묶으면 됩니다. 배열의 길이가 홀수라면 가운데 요소는 짝이 없으므로, 해당 요소만 담긴 배열을 마지막에 별도로 추가해 주면 됩니다.

이를 구현한 전체 코드는 다음과 같습니다.

const arr = [1, 2, 3, 4, 5, 6];
const edgePairs = arr => {
   const res = [];
   const upto = arr.length % 2 === 0 ? arr.length / 2 : arr.length / 2 - 1;
   for(let i = 0; i < upto; i++){
      res.push([arr[i], arr[arr.length-1-i]]);
   };
   if(arr.length % 2 !== 0){
      res.push([arr[Math.floor(arr.length / 2)]]);
   };
   return res;
};
console.log(edgePairs(arr));

코드 동작 원리

  • 순회 범위(upto): 배열 길이가 짝수면 length / 2까지, 홀수면 length / 2 − 1까지만 순회합니다. 홀수인 경우 가운데 요소가 자기 자신과 중복해서 짝이 되지 않도록 범위에서 제외합니다.
  • 페어 생성: 각 반복에서 arr[i]와 arr[arr.length − 1 − i]를 하나의 배열로 묶어 결과 배열에 추가합니다.
  • 가운데 요소 처리: 길이가 홀수일 때는 Math.floor(length / 2) 위치의 가운데 요소를 한 요소만 담긴 배열 형태로 마지막에 추가합니다.

실행 결과

코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

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

이처럼 배열을 절반만 순회하면서 양 끝 요소를 매칭하면, 시간 복잡도 O(n)으로 효율적으로 양끝 페어링 배열을 만들 수 있습니다. 문자열 배열 등 다른 타입의 배열에도 동일하게 적용할 수 있습니다.