😎풀이

  1. s의 각 문자 빈도 수집
  2. 빈도 기준 내림차 순 정렬하여 조회 용이성 높이기
  3. 가장 많은 문자가 전체 문자 길이의 절반을 초과한다면 정렬 불가하므로 빈 문자열 반환
  4. 가장 많은 문자부터 한 칸을 띄운 상태로 배열에 할당 후 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('')
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글