https://www.acmicpc.net/problem/2910

 

2910번: 빈도 정렬

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

www.acmicpc.net

 

 

문제 풀이 

- dictionary에 등장 순서, 빈도수를 저장한다.

- 빈도수를 내림차순, 등장 순서를 오름차순으로 정렬

N, C = map(int, input().split())  # N개의 숫자, C보다 작다
num_list = list(map(int, input().split()))  # 메시지 수열
dict_info = {}  # [0] 등장 순서, [1] 빈도수
idx = 1
answer = ''

for num in num_list:
    if num in dict_info:
        dict_info[num][0] += 1
    else:
        dict_info[num] = [1, idx]
        idx += 1

sorted_num = sorted(dict_info.items(), key=lambda x: [-x[1][0], x[1][1]])

for key, value in sorted_num:
    answer += (str(key) + ' ') * value[0]

print(answer[:-1])

+ Recent posts