
😎풀이
- { 문자: 빈도 } 형태로 맵핑하는
charToFreq 정의
charToFreq를 활용하여 { 빈도: [문자1, 문자2, ...] } 형태로 맵핑하는 freqToSet 정의
freqToSet을 순회하며, 빈도 그룹 중 가장 많은 문자를 포함하는 빈도의 그룹 문자를 순서에 상관없이 반환 단, 최대 문자 수가 동일한 그룹이 있다면 빈도가 더 높은 그룹의 문자를 반환
function majorityFrequencyGroup(s: string): string {
const charToFreq = new Map<string, number>()
const freqToSet = new Map<number, Set<string>>()
for(const char of s) {
const prevFreq = charToFreq.get(char) ?? 0
const prevSet = freqToSet.get(prevFreq) ?? new Set()
prevSet.delete(char)
const nextFreq = prevFreq + 1
charToFreq.set(char, nextFreq)
const nextSet = freqToSet.get(nextFreq) ?? new Set()
nextSet.add(char)
freqToSet.set(nextFreq, nextSet)
}
let maxFreq = 0
let maxSize = 0
for(const [freq, set] of freqToSet) {
const setSize = set.size
if(setSize < maxSize) continue
if(setSize === maxSize) {
maxFreq = Math.max(maxFreq, freq)
} else {
maxSize = setSize
maxFreq = freq
}
}
return [...freqToSet.get(maxFreq)].join('')
};