ReorganizeString

Published at 2022-03-14

class Solution:
    def reorganizeString(self, s: str) -> str:
        answer = [''] * len(s)
        freq = {}
        for ss in s:
            if ss in freq: freq[ss] += 1
            else: freq[ss] = 1
        
        sort = sorted(freq.items(), key=lambda x: x[1], reverse=True)  # 밸류 기준 정렬
        
        if sort[0][1] > ceil(len(s) / 2): return ''  # 실패
        
        i = 0
        for key, val in sort:
            while freq[key] > 0:
                answer[i] = key
                i += 2
                freq[key] -= 1
                if i >= len(answer): i = 1
            
        return ''.join(answer)
    
    # 단어의 빈도 수 구해서 딕셔너리를 내림차순 정렬
    # answer에 [0]부터 2씩 건너뛰며 단어 입력. 끝까지 돌면 이번엔 [1]부터 단어 입력
    # 만약에 딕셔너리 최고값이(첫 키로 입력될값) s의 총 개수보다 크다면 한바퀴 돌고 맨 앞 문자랑 다시 만나므로 실패