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

JavaScript에서 문자열을 알파벳 역순으로 정렬하는 방법

문제 이해하기

소문자로만 구성된 문자열을 입력받아 알파벳 역순(내림차순)으로 정렬하는 JavaScript 함수를 작성해야 합니다. 즉, 'b'가 'a'보다 앞에 오고, 'c'가 'b'보다 앞에 오는 방식으로 정렬하는 것입니다.

예를 들어, 입력 문자열이 다음과 같다면 −

const str = "hello";

출력 결과는 다음과 같아야 합니다 −

const output = "ollhe";

구현 아이디어

핵심 접근 방식은 다음 세 단계로 요약할 수 있습니다.

  • 문자열을 개별 문자로 분리해 배열로 만든다.
  • 사용자 정의 비교 함수를 통해 내림차순으로 정렬한다.
  • 정렬된 배열을 다시 하나의 문자열로 결합한다.

예제 코드

다음은 위 로직을 구현한 전체 코드입니다 −

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));

코드 동작 원리

각 부분이 어떻게 동작하는지 살펴보겠습니다.

1. split("")으로 문자열 분리

split("")은 문자열을 개별 문자 단위의 배열로 변환합니다. 예를 들어 "hello"는 ['h', 'e', 'l', 'l', 'o'] 배열이 됩니다.

2. sorter 비교 함수

sorter 함수는 두 문자를 비교하여 정렬 순서를 결정합니다. +(a < b) 표현식은 a가 b보다 작으면 true(즉, 1)를 반환하고, 그렇지 않으면 0 또는 false(즉, -1)에 해당하는 값을 반환합니다. legend 배열인 [-1, 0, 1]에서 해당 인덱스의 값을 가져오므로, 결과적으로 큰 문자가 앞에 오는 내림차순 정렬이 이루어집니다.

3. join("")으로 문자열 재조합

정렬이 완료된 문자 배열을 join("")으로 합쳐 최종 문자열을 만듭니다.

출력 결과

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

ollhe

더 간결한 대안: localeCompare 활용

비교 로직을 직접 구현하지 않고 localeCompare 메서드를 사용하면 한 줄로 처리할 수 있습니다.

const reverseSort = str =>
    str.split("").sort((a, b) => b.localeCompare(a)).join("");

console.log(reverseSort("hello")); // ollhe

b.localeCompare(a)처럼 인자 순서를 바꿔 호출하면 자동으로 내림차순 비교가 되며, 가독성도 뛰어나기 때문에 실무에서는 이 방식을 더 많이 사용합니다. 다만 대소문자가 섞인 문자열이라면 localeCompare에 옵션을 추가하거나 사전에 toLowerCase()로 정규화하는 것이 안전합니다.