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

JavaScript에서 마지막 문자를 기준으로 단어 정렬하는 방법

문제 소개

문자열 형태의 여러 단어(str)를 입력받아, 각 단어의 마지막 문자를 기준으로 알파벳순으로 정렬한 결과를 반환하는 JavaScript 함수를 작성해야 합니다.

이때 두 단어의 마지막 글자가 서로 같다면, 입력 문자열에서 처음 등장한 순서를 그대로 유지해야 한다는 조건이 있습니다.

예제 코드

다음은 위 문제를 해결하는 코드입니다.

const str = 'this is some sample string';
const sortByLast = (str = '') => {
    const arr = str.split(' ');
    const sorter = (a, b) => {
        return a[a.length - 1].charCodeAt(0) - b[b.length - 1].charCodeAt(0);
    };
    arr.sort(sorter);
    const sortedString = arr.join(' ');
    return sortedString;
};
console.log(sortByLast(str));

출력 결과

콘솔에는 아래와 같이 출력됩니다.

some sample string this is

코드 동작 원리

위 코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. 문자열을 배열로 분리

split(' ') 메서드는 공백을 기준으로 문자열을 나누어 단어 배열을 만듭니다. 예제 문자열은 ['this', 'is', 'some', 'sample', 'string']이라는 배열로 변환됩니다.

2. 마지막 문자 기준으로 비교

sorter 함수는 각 단어의 마지막 문자를 a[a.length - 1]처럼 인덱스로 접근한 뒤, charCodeAt(0)으로 해당 문자의 유니코드 코드 값을 구합니다. 두 값의 차이가 음수면 a가 앞에, 양수면 b가 앞에 오도록 정렬이 진행됩니다.

3. 정렬 후 다시 문자열로 결합

sort()로 배열을 정렬한 뒤, join(' ')을 사용해 공백을 사이에 두고 하나의 문자열로 다시 합칩니다.

참고로 ES2019부터 자바스크립트의 Array.prototype.sort()는 안정 정렬(stable sort)을 보장하므로, 마지막 글자가 같은 단어들은 원래 입력된 순서대로 배치됩니다. 따라서 문제의 조건을 별도의 처리 없이 자연스럽게 만족할 수 있습니다.