새벽까지

베스트셀러 - 1302

문제 링크

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

분류

자료 구조, 해시를 사용한 집합과 맵, 정렬, 문자열

문제 설명

김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.

오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.


🙋 문제 해석

이 문제는 하루 동안 가장 많이 팔린 책을 input으로 입력 받아서, 개수를 세고 최대값이 여러개라면, 책을 알파벳 순서로 정렬하는 문제입니다.

 

여기서 문제는, 최대값은 내림차순이고, 빠른 알파벳은 오름차순으로 해야 [0]번 인덱스에서 찾을 수 있습니다.

 

이를 해결 하는게 관건이라고 생각하는데요, 베스트셀러라는 리스트를 초기화해서 넣고 그 리스트끼리 오름차순을 해서 해결했습니다.


🔑 Solution 🔑

from collections import Counter

# 사용자로부터 책 제목을 입력받아 리스트에 저장한다.

lis = [input() for i in range(int(input()))]

# 리스트에서 각 책 제목이 몇 번 등장하는지 카운트하고, 빈도수가 높은 순서대로 정렬한다.

comm = Counter(lis).most_common()

# 가장 많이 팔린 책들의 제목을 저장할 리스트를 초기화한다.

best_seller = []

# 빈도수가 가장 높은 책들 중에서 가장 앞에 있는 알파벳을 저장한다.

for i in comm:  
if comm[0][1] == i[1]: # 빈도수가 가장 높은 책과 빈도수가 같은 책들만 선택한다.  
best_seller.append(i[0]) # 가장 많이 팔린 책들의 제목을 리스트에 추가한다.

# 가장 앞에 있는 알파벳을 출력한다.

print(min(best_seller))

collections 모듈의 Counter 클래스를 사용하여 입력받은 책들에서 각 책 제목이 몇 번 등장하는지 셉니다. 그리고 most_common() 메서드를 사용하여 빈도수가 높은 순서대로 정렬합니다.

 

그리고 comm 변수에는 (책 제목, 등장 횟수)의 쌍이 저장되어 있습니다. 이 중에서 빈도수가 가장 높은 책들의 제목을 best_seller 리스트에 추가하고, 마지막으로 min() 함수를 사용하여 best_seller 리스트에서 가장 앞에 있는 알파벳을 출력합니다.

 



collections 모듈의 대한 추가자료

 

collections — Container datatypes

Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.,,...

docs.python.org

 

🙇

profile

새벽까지

@GoS

좋아요❤️ 구독👍🏻 감사합니다!