문제 개요
소문자로만 구성된 문자열을 입력받아 알파벳 역순(내림차순)으로 정렬하는 JavaScript 함수를 작성해야 합니다. 즉, 일반적인 사전 순서와는 반대로 b가 a보다 앞에, c가 b보다 앞에 오도록 배치하는 것입니다.
예시
입력 문자열이 다음과 같다고 가정해 보겠습니다.
const str = "hello";
이때 기대되는 출력 결과는 다음과 같습니다.
const output = "ollhe";
구현 코드
이 문제는 배열의 sort() 메서드에 내림차순 정렬용 비교 함수를 전달하는 방식으로 해결할 수 있습니다. 전체 코드는 다음과 같습니다.
const string = 'hello';
const sorter = (a, b) => {
const legend = [-1, 0, 1];
return legend[+(a < b)];
}
const reverseSort = str => {
const strArr = str.split("");
return strArr
.sort(sorter)
.join("");
};
console.log(reverseSort(string));
코드 동작 원리
split("") : 문자열을 한 글자씩 잘라 배열로 변환합니다. 예를 들어 "hello"는 ['h', 'e', 'l', 'l', 'o'] 배열이 됩니다.
sorter : 두 문자를 비교하는 커스텀 비교 함수입니다. legend 배열의 인덱스 값을 활용하여, 첫 번째 요소가 두 번째 요소보다 크거나 같을 때 음수(-1)를 반환하도록 함으로써 내림차순 정렬을 구현합니다.
join("") : 정렬이 완료된 배열의 요소들을 다시 하나의 문자열로 결합합니다.
실행 결과
코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
ollhe
더 간단한 대안
커스텀 비교 함수 없이도 sort()로 오름차순 정렬한 뒤 reverse() 메서드로 배열을 뒤집으면 동일한 결과를 얻을 수 있습니다.
const reverseSort = str => str.split("").sort().reverse().join("");
console.log(reverseSort("hello")); // "ollhe"
두 방식 모두 시간 복잡도는 O(n log n)으로 동일하므로, 코드의 가독성과 상황에 맞게 적절한 방법을 선택하여 사용하면 됩니다.