이번 글에서는 숫자 배열을 입력받아 다음 조건에 따라 정렬하는 JavaScript 함수를 작성해 보겠습니다.
- 배열의 첫 번째 요소(array[0])는 반드시 제자리에 유지되어야 합니다.
- 첫 번째 요소보다 큰 값들이 있다면 그다음 순서로 배치합니다.
- 나머지 값들은 가장 작은 정수부터 오름차순으로 정렬합니다.
예제
입력 배열이 다음과 같다고 가정해 보겠습니다.
const arr = [10, 7, 12, 3, 5, 6];
위 조건을 적용하면 출력 결과는 다음과 같습니다.
const output = [10, 12, 3, 5, 6, 7];
첫 번째 요소인 10은 맨 앞자리를 유지하고, 이보다 큰 값인 12가 바로 뒤에 위치합니다. 이후 나머지 값들(3, 5, 6, 7)은 오름차순으로 정렬됩니다.
구현 코드
다음은 위 로직을 구현한 코드입니다.
const arr = [10, 7, 12, 3, 5, 6];
const uniqueSort = (arr = []) => {
const first = arr[0];
const sorter = (a, b) => {
return (a < first) - (b < first) || a - b;
};
arr.sort(sorter);
};
uniqueSort(arr);
console.log(arr);코드 설명
핵심은 커스텀 비교 함수 sorter입니다. 동작 원리를 살펴보면 다음과 같습니다.
(a < first) - (b < first): 첫 번째 요소보다 작은 값들을 뒤로 밀어냅니다. 두 값이 같은 그룹에 속하면 결과가 0이 되므로 다음 조건으로 넘어갑니다.a - b: 같은 그룹 내에서는 일반적인 오름차순 비교가 적용됩니다.
덕분에 첫 번째 요소(및 그보다 크거나 같은 값들)는 앞쪽에, 나머지 값들은 뒤쪽에 오름차순으로 자연스럽게 배치됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[10, 12, 3, 5, 6, 7]
이처럼 Array.prototype.sort()와 커스텀 비교 함수만 활용하면 별도의 복잡한 로직 없이도 첫 번째 요소를 고정한 특수 정렬을 간단하게 구현할 수 있습니다.