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

JavaScript로 나이 배열 정렬하기 – 18세 미만 값을 앞으로 배치하는 방법

문제 상황

사람들의 나이를 담고 있는 숫자 배열이 주어졌을 때, 18세 미만(미성년자)의 나이를 모두 배열의 앞쪽으로 옮기는 JavaScript 함수를 작성해야 합니다. 이때 새로운 배열을 만드는 등 추가 메모리를 사용하지 않고 기존 배열 자체를 정렬해야 한다는 조건이 있습니다.

해결 방법

JavaScript의 Array.prototype.sort() 메서드는 비교 함수(comparator)를 인자로 받을 수 있습니다. 비교 함수는 두 요소 a와 b를 비교하여 정렬 순서를 결정하며, 동작 방식은 다음과 같습니다.

  • 반환값이 음수(-1)이면 a가 b보다 앞에 위치합니다.
  • 반환값이 양수(1)이면 b가 a보다 앞에 위치합니다.
  • 반환값이 0이면 순서가 유지됩니다.

따라서 값이 18 미만일 때 -1을 반환하고, 그렇지 않으면 1 또는 0을 반환하도록 비교 함수를 작성하면 미성년자의 나이가 자연스럽게 배열 앞쪽으로 정렬됩니다.

예제 코드

이를 구현한 코드는 다음과 같습니다 −

const ages = [23, 56, 56, 3, 67, 8, 4, 34, 23, 12, 67, 16, 47];
const sorter = (a, b) => {
   if (a < 18) {
      return -1;
   };
   if (b < 18) {
      return 1;
   };
   return 0;
}
const sortByAdults = arr => {
   arr.sort(sorter);
};
sortByAdults(ages);
console.log(ages);

실행 결과

콘솔 출력 결과는 다음과 같습니다 −

[
   16, 12, 4, 8, 3, 23, 56,
   56, 67, 34, 23, 67, 47
]

코드 설명

위 코드에서 sorter 비교 함수는 첫 번째 인자 a가 18 미만일 때 -1을 반환하여 해당 값을 앞으로 보내고, 두 번째 인자 b가 18 미만일 때 1을 반환하여 b를 앞으로 배치합니다. sort() 메서드는 원본 배열을 직접 수정(in-place)하기 때문에 별도의 추가 메모리 없이도 요구 조건을 충족할 수 있습니다. 참고로 18세 이상의 값들 사이에서는 상대적인 순서가 보장되지 않으므로, 성인 간의 원래 순서를 유지해야 한다면 안정 정렬(stable sort) 로직을 추가로 고려해야 합니다.