문제
입력된 텍스트에서 가장 많이 등장하는 알파벳을 모두 사전순으로 출력하라.
입력
여러 줄에 걸쳐 알파벳 소문자와 공백으로 이루어진 텍스트가 주어진다.
출력
가장 많이 등장하는 알파벳을 사전순으로 출력한다.
예제
| 입력 | 출력 |
|---|---|
abc | abc |
풀이
알파벳 빈도를 카운팅하여 최대 빈도인 글자들을 사전순으로 출력한다.
- 전체 텍스트에서 공백을 제거하고 각 알파벳의 빈도를 센다
- 최대 빈도를 가진 알파벳을 찾는다
- 같은 빈도의 알파벳을 모두 모아 사전순으로 정렬하여 출력한다
핵심 아이디어: 26개 알파벳만 카운팅하면 되므로 O(1) 공간에 해결 가능하다.
코드
const solution = (input) => {
const cnt = input.join("").split(" ").join("").split("").reduce((acc, cur) => {
if (acc[cur]) acc[cur]++; else acc[cur] = 1; return acc;
}, {});
const maxValue = Object.keys(cnt).reduce((a, b) => (cnt[a] > cnt[b] ? a : b));
const arr = [];
for (let V in cnt) { if (cnt[V] === cnt[maxValue]) arr.push(V); }
return arr.sort().join("");
};
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
console.log(solution(input));복잡도
- 시간: O(N)
- 공간: O(1)