본문 바로가기
Problem Solving

[Hash Table] 과일 가게: 많이 팔린 순서로 정렬

by Bokoo14 2022. 12. 13.
N개의 과일 판매 목록이 주어졌을 때, 가장 많이 팔린 과일의 순서로 정렬해서 출력하시오.
단, 과일을 판매한 횟수가 동일하다면, 과일 이름의 알파벳 순서로 출력하시오.
Input
첫째 줄에 과일 판매 목록의 길이 N이 주어진다.
둘째 줄부터 N개의 줄에 한 줄에 하나씩 판매한 과일의 이름이 주어진다.
37
orange
blueberry
strawberry
strawberry
strawberry
strawberry
orange
blueberry
pear
lemon
lemon
orange
tomato
apple
blueberry
kiwi
orange
blueberry
kiwi
pear
melon
lemon
orange
orange
tomato
strawberry
apple
pear
strawberry
strawberry
melon
banana
orange
blueberry
pear
melon
tomato

Output
첫째 줄부터 한 줄에 하나씩 과일의 판매 횟수와 과일의 이름을 출력한다.
출력의 순서는 가장 많이 팔린 과일부터 출력하고,
만일, 과일 판매 횟수가 동일하면, 알파벳 순서가 빠른 과일을 먼저 출력한다.
7 orange
7 strawberry
5 blueberry
4 pear
3 lemon
3 melon
3 tomato
2 apple
2 kiwi
1 banana
import sys
input = sys.stdin.readline

n = int(input())
fruit = [input().strip() for _ in range(n)]

sale = {} # 해시 테이블 생성
def sol(fruit, n):
    for i in fruit: 
        if i in sale: # 해시 테이블에 이미 있다면 개수만 증가
            sale[i]+=1
        else: # 해시테이블에 없는 새로운 과일이라면 해시테이블에 추가
            sale[i]=1

sol(fruit, n)
answer = sorted(sale.items(), key = lambda x: (-x[1], [x[0]])) # 해시테이블 정렬. 많이 팔린 순(내림차순), 알파벳 순(오름차순)

for i in range(len(answer)): # 모든 과일들과 팔린 횟수 출력
    print(answer[i][1], answer[i][0])