관리 메뉴

솜씨좋은장씨

[BaekJoon] 2910번 : 빈도 정렬 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 2910번 : 빈도 정렬 (Python)

솜씨좋은장씨 2021. 12. 4. 13:11
728x90
반응형

코딩 1일 1문제! 오늘은 555일차 문제! 백준의 빈도 정렬 입니다.

 

2910번: 빈도 정렬

첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다.

www.acmicpc.net

👨🏻‍💻 코드 ( Solution )

import sys

def frequency_sorting(numbers):
    order_cnt_dict = {}
    priority_dict = {}
    
    for idx, number in enumerate(numbers):
        if number not in order_cnt_dict.keys():
            order_cnt_dict[number] = [0, idx]
            
        order_cnt_dict[number][0] += 1
    
    order_cnt_items = order_cnt_dict.items()
    
    sorted_numbers = [num[0] for num in sorted(order_cnt_items, key=lambda x: (-x[1][0], x[1][1]))]
    
    for idx, num in enumerate(sorted_numbers):
        priority_dict[num] = idx
        
    numbers = sorted(numbers, key=(lambda x: priority_dict[x]))
    
    return " ".join(map(str, numbers))
        
    
    
        
if __name__ == "__main__":
    N, C = map(int, input().split())
    numbers = list(map(int, input().split()))
    
    print(frequency_sorting(numbers))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments