[백준 2910] 빈도 정렬

Junyoung Park·2022년 3월 1일
0

코딩테스트

목록 보기
140/631
post-thumbnail

1. 문제 설명

빈도 정렬

2. 문제 분석

딕셔너리를 통해 빈도와 처음 등장한 인덱스를 카운트하고, 이후 딕셔너리 값을 key= lambda x 등을 통해 정렬할 수 있다.

3. 나의 풀이

import sys

n, c = map(int, sys.stdin.readline().rstrip().split())
numbers = {}

for idx, num in enumerate(list(map(int, sys.stdin.readline().rstrip().split()))):
    num_info = numbers.get(num, [0, idx, num])
    num_cnt, num_idx, num = num_info
    num_cnt += 1
    numbers[num] = [num_cnt, num_idx, num]
    # 딕셔너리에 빈도와 처음 나온 인덱스, 숫자 기록

for num_cnt, num_idx, num in sorted(numbers.values(), key= lambda x: (-x[0], x[1])):
    # 빈도가 크고, 인덱스가 작은 순서대로 정렬
    result = f"{num} "*num_cnt
    print(result, end='')

profile
JUST DO IT

0개의 댓글