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

JavaScript에서 문자 빈도순으로 문자열 정렬하는 방법

문제 정의

JavaScript 함수를 작성해야 합니다. 이 함수는 문자열을 유일한 인수로 받아, 원본 문자열을 기반으로 새로운 문자열을 생성합니다.

새로운 문자열은 등장 횟수가 많은 문자부터 내림차순 빈도 순서대로 배치되어야 합니다.

예를 들어, 함수에 다음과 같은 입력이 주어진다면 −

const str = 'free';

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

const output = 'eefr';

출력 설명

문자 e는 두 번 등장하므로 가장 앞에 배치되고, 그 뒤를 한 번씩 등장한 rf가 따라옵니다.

구현 예제

이 문제를 해결하는 코드는 다음과 같습니다 −

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