문제 정의
JavaScript 함수를 작성해야 합니다. 이 함수는 문자열을 유일한 인수로 받아, 원본 문자열을 기반으로 새로운 문자열을 생성합니다.
새로운 문자열은 등장 횟수가 많은 문자부터 내림차순 빈도 순서대로 배치되어야 합니다.
예를 들어, 함수에 다음과 같은 입력이 주어진다면 −
const str = 'free';
출력 결과는 다음과 같아야 합니다 −
const output = 'eefr';
출력 설명
문자 e는 두 번 등장하므로 가장 앞에 배치되고, 그 뒤를 한 번씩 등장한 r과 f가 따라옵니다.
구현 예제
이 문제를 해결하는 코드는 다음과 같습니다 −
const str = 'free';
const frequencySort = (str = '') => {
let map = {}
for (const letter of str) {
map[letter] = (map[letter] || 0) + 1;
};
let res = "";
let sorted = Object.keys(map).sort((a, b) => map[b] - map[a])
for (let letter of sorted) {
for (let count = 0; count < map[letter]; count++) {
res += letter
}
}
return res;
};
console.log(frequencySort(str));코드 설명
위 코드의 동작 단계는 다음과 같습니다 −
1단계: 각 문자의 등장 횟수를 저장하는 해시맵(객체)을 생성합니다.
2단계: 해시맵의 키(문자)들을 등장 횟수를 기준으로 내림차순 정렬합니다.
3단계: 정렬된 순서대로 각 문자를 해당 빈도만큼 반복하여 결과 문자열을 만듭니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
eefr