5주차 · 해시: 맵과 셋
보통해시문자열

가장 많이 등장한 문자

영소문자로 이루어진 문자열 s가 주어져요. 가장 많이 등장한 문자를 반환해요.

가장 많이 등장한 문자가 여럿이면 사전순으로 앞선 문자를 반환해요.

빈도수 세기는 해시의 절반이에요. 먼저 { 문자: 개수 } 를 만들고, 그 다음 만들어진 맵에서 최댓값을 뽑는 두 단계로 나누는 게 요령이에요. 한 번에 하려 들면 동점 처리에서 꼬여요.

예시

예시 1
예시 2
예시 3

제한 사항

  • 1 ≤ s.length ≤ 100,000
  • s 는 영소문자로만 이루어져요.
맵을 순회하며 최댓값을 찾을 때 순회 순서에 기대지 마세요. 개수가 더 클 때만 갱신하고, 같을 때는 문자를 비교해 더 앞선 쪽을 남기면 순서와 무관하게 답이 정해져요. 영소문자뿐이니까 길이 26 배열로도 돼요 — 그러면 순서가 곧 사전순이에요.
javascript
function mostFrequentChar(s) {
const count = new Map();
for (const c of s) count.set(c, (count.get(c) ?? 0) + 1);
let best = null;
let bestCount = 0;
for (const [c, n] of count) {
if (n > bestCount || (n === bestCount && c < best)) {
best = c;
bestCount = n;
}
}
return best;
}
다음 문제두 수의 합
에디터를 불러오고 있어요…
코드를 작성하고를 눌러 예시 테스트를 확인해 보세요.