
😎풀이
s의 각 문자 빈도 수집
- 빈도 기준 내림차 순 정렬하여 조회 용이성 높이기
- 가장 많은 문자가 전체 문자 길이의 절반을 초과한다면 정렬 불가하므로 빈 문자열 반환
- 가장 많은 문자부터 한 칸을 띄운 상태로 배열에 할당 후 join 하여 반환
function reorganizeString(s: string): string {
const len = s.length
const freqMap = new Map<string, number>()
for(const char of s) {
freqMap.set(char, (freqMap.get(char) ?? 0) + 1)
}
const sorted = [...freqMap.entries()].toSorted((a, b) => b[1] - a[1])
if(sorted[0][1] > Math.ceil(len / 2)) return ''
const result = Array(len)
let idx = 0
for(const [char, freq] of sorted) {
for(let i = 0; i < freq; i++) {
if(idx >= len) idx = 1
result[idx] = char
idx += 2
}
}
return result.join('')
};