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

JavaScript에서 배열의 짝수와 홀수 분리 정렬하기

문제 개요

숫자 배열을 입력받아, 모든 짝수는 홀수보다 왼쪽에, 모든 홀수는 짝수보다 오른쪽에 위치하도록 재배열한 배열을 반환하는 JavaScript 함수를 작성해야 합니다.

이 문제는 별도의 새로운 알고리즘 없이도 Array.prototype.sort() 메서드에 사용자 정의 비교 함수(comparator)를 전달하는 방식으로 간단하게 해결할 수 있습니다.

해결 접근 방식

  • 숫자가 짝수인지 판별하는 헬퍼 함수 isEven을 작성합니다.
  • sort() 메서드에 비교 함수를 전달합니다.
  • 첫 번째 요소 a가 짝수이고 두 번째 요소 b가 홀수라면 -1을 반환하여 a를 앞쪽으로 보냅니다.
  • a가 홀수이고 b가 짝수라면 1을 반환하여 b를 앞쪽으로 보냅니다.
  • 두 요소가 모두 짝수이거나 모두 홀수라면 0을 반환하여 기존 순서를 유지합니다.

예제 코드

const arr = [2, 6, 3, 7, 8, 3, 5, 4, 3, 6, 87, 23, 2, 23, 67, 4];
const isEven = num => num % 2 === 0;
const sorter = (a, b) => {
    if(isEven(a) && !isEven(b)){
        return -1;
    };
    if(!isEven(a) && isEven(b)){
        return 1;
    };
    return 0;
};
arr.sort(sorter);
console.log(arr);

실행 결과

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

[
    2, 6, 8, 4, 6, 2,
    4, 3, 7, 3, 5, 3,
    87, 23, 23, 67
]

참고 사항

출력 결과를 보면 짝수 그룹과 홀수 그룹 내부에서는 원래 배열의 상대적인 순서가 유지되는 것을 확인할 수 있습니다. 이는 ES2019(ES10)부터 자바스크립트 표준 명세에서 Array.prototype.sort()안정 정렬(stable sort)을 보장하기 때문입니다. 따라서 같은 그룹에 속한 요소들 사이의 원래 순서를 유지하고 싶다면 위 방식이 안전하게 동작합니다.