문제 소개
소문자 영어 알파벳으로만 구성된 문자열 str을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.
이 함수는 입력 문자열을 바탕으로 각 문자를 영어 알파벳 역순(z → a) 기준으로 정렬한 새로운 문자열을 생성하여 반환해야 합니다.
예를 들어, 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.
const str = 'abcdef';
그렇다면 기대되는 출력 결과는 다음과 같습니다.
const output = 'fedcba';
해결 방법 1: 사용자 정의 비교 함수 활용
가장 대표적인 접근 방식은 문자열을 한 글자씩 분리해 배열로 만든 뒤, 알파벳 순서를 거꾸로 비교하는 사용자 정의 비교 함수와 함께 sort() 메서드를 호출하는 것입니다.
전체 구현 코드는 다음과 같습니다.
const str = 'abcdef';
const reverseSorting = (str = '') => {
const strArr = str.split('');
const mapString = 'abcdefghijklmnopqrstuvwxyz';
const sorter = (a, b) => {
return mapString.indexOf(b) - mapString.indexOf(a);
};
strArr.sort(sorter);
return strArr.join('');
};
console.log(reverseSorting(str));
코드 동작 원리:
split('')으로 문자열을 글자 단위 배열로 변환합니다.- 기준 문자열(
mapString)에서 두 문자의 인덱스를 조회한 뒤,b의 인덱스에서a의 인덱스를 빼서 내림차순 비교를 수행합니다. - 정렬이 완료된 배열을
join('')으로 다시 하나의 문자열로 합쳐 반환합니다.
해결 방법 2: sort()와 reverse() 조합
소문자 알파벳만 다루는 경우라면 기본 오름차순 정렬 후 배열을 뒤집는 훨씬 간결한 방법도 사용할 수 있습니다.
const reverseSorting = (str = '') => {
return [...str].sort().reverse().join('');
};
console.log(reverseSorting('abcdef')); // 'fedcba'또는 localeCompare()를 활용하면 한 줄로도 처리할 수 있습니다.
const reverseSorting = (str = '') =>
[...str].sort((a, b) => b.localeCompare(a)).join('');
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
fedcba