개발 공부 기록

나는 무엇을 하는가?

알고리즘 문제 풀이

[백준 2910번] 빈도 정렬 - 파이썬

진!!!!! 2024. 4. 13. 21:53

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

 

2910번: 빈도 정렬

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

www.acmicpc.net

 

💡문제 분석 요약

입력으로 주어진 수열을 빈도가 많은 순으로 정렬한 다음 출력한다.

 

💡알고리즘 설계

1. 해시에 해당 숫자가 저장된 빈도를 저장한다.

2. 해시의 값을 기준으로, 빈도가 높은 순으로 정렬한다.

3, for문을 이용해 해시의 값 만큼 해당 숫자를 출력한다.

 

💡코드

import sys
input = sys.stdin.readline

N, C=map(int, input().split())
message=list(map(int, input().split()))

hash={}
for i in message:
    if not i in hash:
        hash[i]=1
    else:
        hash[i]+=1

sorted_hash=sorted(hash.items(), reverse=True, key = lambda x: x[1])

for i in sorted_hash:
    for _ in range(i[1]):
        print(i[0], end=" ")

 

💡 느낀점 or 기억할 정보

수열을 빈도 정렬 해야하지만 굳이 정렬까진 하지 않고 프린트만 해도 되어 프린트만 했다.

해시 문제를 많이 풀어서 그런가 빨리 끝남 👍