알고리즘/백준

백준 2910 - (python)빈도 정렬

www.acmicpc.net/problem/2910

 

2910번: 빈도 정렬

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

www.acmicpc.net

1. 알고리즘 유형

정렬, 구현

 

2. 자료구조

set, 우선순위큐, 딕셔너리

 

3. 풀이

 

리스트에서 요소마다 반복횟수를 딕셔너리로 만들기

1) count() 함수 사용

 

우선순위큐로 정렬

1) 이미 heapq에 넣으면 set에 추가해서 중복 방지

2) 우선순위의 기준 잡기

 

출력

1) 반복 횟수만큼 출력

 

코드

import sys
import heapq
N, C = map(int, sys.stdin.readline().split())
li = list(map(int, sys.stdin.readline().split()))
diction = {}
pq = []
_set = set()
for i in range(N):
    if not diction.get(li[i]):
        diction[li[i]] = li.count(li[i])
for i in range(N):
    if not li[i] in _set:
        _set.add(li[i])
        heapq.heappush(pq, [-diction[li[i]], i, li[i]])
while pq:
    temp = heapq.heappop(pq)
    for _ in range(-temp[0]):
        print(temp[2], end=" ")

'알고리즘 > 백준' 카테고리의 다른 글

백준 - 1662 압축  (0) 2021.05.23
백준 15810 - 풍선 공장  (0) 2021.05.18
백준 17609 - (python)회문  (0) 2021.05.01
백준 13901 - (python) 로봇  (0) 2021.04.28
백준 3190 - (python) 뱀  (0) 2021.04.27