{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉정렬〉단어 빈도 정렬← 이전다음 →
#083 · 정렬쉬움해시 + 정렬 (커스텀 비교 함수)

단어 빈도 정렬

문제

영문 소문자로 된 문자열 배열 words 가 주어집니다. 각 단어의 등장 횟수를 세고, 다음 두 기준으로 정렬한 결과를 반환하세요.

  1. 등장 횟수가 "많은" 단어가 앞 (내림차순)
  2. 동률이면 사전순(오름차순) 으로 앞

반환 형식: [단어, 횟수] 쌍을 담은 2차원 배열

예시

words=["apple","banana","apple","cherry","banana","apple"]
  → [["apple",3], ["banana",2], ["cherry",1]]
 
words=["c","b","a"]
  → [["a",1], ["b",1], ["c",1]]   (모두 동률 → 사전순)
 
words=["cat","dog","cat","cat","dog","bird"]
  → [["cat",3], ["dog",2], ["bird",1]]
 
words=["zebra","apple","zebra"]
  → [["zebra",2], ["apple",1]]

제약 조건

  • 1 ≤ words.length ≤ 100,000
  • 1 ≤ words[i].length ≤ 20
  • words[i] 는 영문 소문자

시간 복잡도 목표: O(N log N)

테스트 케이스

예시 1: 등장 횟수 순
입력: words = ["apple","banana","apple","cherry","banana","apple"]
출력: [["apple",3],["banana",2],["cherry",1]]
예시 2: 모두 동률 → 사전순
입력: words = ["c","b","a"]
출력: [["a",1],["b",1],["c",1]]
예시 3: 세 종류 단어
입력: words = ["cat","dog","cat","cat","dog","bird"]
출력: [["cat",3],["dog",2],["bird",1]]
예시 4: 등장 횟수 우선 (사전순보다 우선)
입력: words = ["zebra","apple","zebra"]
출력: [["zebra",2],["apple",1]]
예시 5: 단일 단어
입력: words = ["x"]
출력: [["x",1]]
예시 6: foo, bar 동률 → 사전순으로 bar 먼저
입력: words = ["foo","bar","baz","foo","bar"]
출력: [["bar",2],["foo",2],["baz",1]]
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.