[leetcode] 451. 빈도순으로 문자 정렬

2025. 10. 15. 00:12·알고리즘/코딩테스트

문제

문자열이 주어졌을 때, 문자의 빈도를 기준으로 내림차순으로 정렬하세요. 문자의 빈도는 문자열에 나타나는 횟수입니다.

 

입출력

입력 s = "tree"

출력 "eert"

설명 'e'는 두번 나타나는 반면 'r'과 't'는 모두 한 번씩 나타납니다.

따라서 'e'는 'r'과 't' 앞에 모두 나와야 합니다. 따라서 'eetr'도 유효한 답입니다.

 

입력 s = "cccaaa"

출력 'aaaccc"

설명 'c'와 'a'가 모두 세번씩 등장하므로'cccaaa'와 'aaaccc'는 모두 유효한 답입니다.

 

입력 s = "Aabb"

출력 "bbAa"

설명 "bbaA"도 유효한 답이지만, "Aabb"는 틀린답입니다.

"A"와 'a'는 서로 다른 문자로 처리됩니다.

 

제약 조건

1 <= s.length <= 5* 10 5승

s 대문자, 소문자, 영어문자와, 숫자로 구성

 

어떻게 풀까?

빈도수를 넣기위해 사용하기좋은 자료구조는? hashmap

왜 그럴까요 ? hashmap은 o(1) 시간에 데이터를 저장하고 조회할수있기때문에 

 

1. hashmap의 key가 있다면 value +

2. 없다면 새로넣기

3. value가 제일많은것부터 key기준으로 배열 정렬하기

 

 

3번이 조금 헷갈렸지만

 

's' 2 'v' 3 'x' 2  

이렇게있다면 어떻게 [v, x, s] 이기준으로 value 값크기 기준으로 순서를 정렬할수있을까?

sort로 가능했다. 

단, sort를 쓰기위해서는 map.entries()로 객체를 꺼내서 배열을 만든후 정렬해주었다.

  const sortedKeys = [...map.entries()]
        .sort((a,b) => b[1] - a[1])
        .map(([k, v]) => k)

 

 

 

완성된코드

/**
 * @param {string} s
 * @return {string}
 */
var frequencySort = function(s) {
    const map = new Map();
    for(let val of s){
        if(map.has(val)){
            map.set(val, map.get(val) + 1); 
        }else{
            map.set(val, 1);
        }
    }

    let result = "";

    const sortedKeys = [...map.entries()]
        .sort((a,b) => b[1] - a[1])
        .map(([k, v]) => k)

    for(const key of sortedKeys){
        const loop = map.get(key);
        for(let i=0; i<loop; i++){
            result += key;
        }
    }

    return result;
};

 

 

 

다시한번 map을 다양하게 꺼내보고 써보는 계기가된코드이다.

 

'알고리즘 > 코딩테스트' 카테고리의 다른 글

[dfs 기본 문제] dfs 로 모든경우의 수 + - 로 더하기  (2) 2025.08.25
[프로그래머스] 큰수 만들기  (2) 2025.08.14
코딩 테스트를 준비하기 전에  (5) 2025.07.27
[프로그래머스] 이진 변환 반복하기  (2) 2025.07.25
[leetcode] 11. Container With Most Water  (0) 2025.05.07
'알고리즘/코딩테스트' 카테고리의 다른 글
  • [dfs 기본 문제] dfs 로 모든경우의 수 + - 로 더하기
  • [프로그래머스] 큰수 만들기
  • 코딩 테스트를 준비하기 전에
  • [프로그래머스] 이진 변환 반복하기
윤랩용
윤랩용
정리하고 내것으로만들기
  • 윤랩용
    yunrap 개발블로그
    윤랩용
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • 알고리즘 (17)
        • 알고리즘유형 (5)
        • 코딩테스트 (7)
      • 네트워크 (3)
      • 언어 (14)
        • HTML (0)
        • CSS (1)
        • Javascript (9)
        • Java (1)
        • 용어 (3)
      • Backend (1)
        • Spring (1)
      • FrontEnd (12)
        • React (9)
        • Next.js (0)
        • 성능 및 전략 (1)
        • LAB(실험실) (1)
      • 프로젝트 (1)
      • 자기개발 (2)
        • motivation (1)
      • STUDY (45)
        • 모던자바스크립트 DeepDive (22)
        • 인사이드 자바스크립트 (2)
        • CS 기술 면접스터디 (10)
      • 요즘 FE TREND 뭘까? (1)
  • 공지사항

    • 블로그를 새롭게 활성화시키겠습니다.
  • 최근 글

  • 인기 글

  • 태그

    __proto__
    var키워드
    map.entries()
    원시타입
    클로저
    커뮤니티기반
    즉시실행함수
    이터레이터객체
    해쉬맵 0(1)
    유사배열객체 배열 변환
    iterator 배열변환
    접근자프로퍼티
    Set 배열변환
    create react app
    캡슐화
    Map 배열변환
    dom 노드 배열변환
    온루틴
    코딩하기전설계
    목표완수
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
윤랩용
[leetcode] 451. 빈도순으로 문자 정렬
상단으로

티스토리툴바