코딩 테스트/Baekjoon

[백준] 1302. 베스트셀러

배기니어 2021. 4. 15. 15:33

문제

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

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

입력

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

출력

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

 


다중 정렬 문제이다.

책의 판매 수로 먼저 내림차순 정렬을 하고, 책 제목으로 오름차순 정렬을 한다.

예제 입출력은 다음과 같다.

 

CASE INPUT OUTPUT
1 5
top
top
top
top
kimtop
top

 

책 제목과 판매 수를 함께 저장해야 하므로 튜플, 딕셔너리, 배열 등의 자료구조를 이용할 수 있다.

하지만 책이 팔릴 때마다 판매 수를 증가시키기 위해 딕셔너리를 이용하여 구현했다.

 

작성 코드

n = int(input())
sold = dict()

for _ in range(n):
    book = input()
    if book in sold:
        sold[book] += 1
    else:
        sold[book] = 1

print(sold.items())

sold = sorted(sold.items(), key = lambda x:(-x[1], x[0]))
print(sold[0][0])

 

  • 딕셔너리 sold의 키는 책 제목이고 값은 판매 수이다.
  • sold = sorted(sold.items(), key = lambda x:(-x[1], x[0]))

sorted() 함수로 sold.items()를 정렬하는데, 기준을 key로 한다. sold.items()는 딕셔너리의 항목들을 배열의 형태로 나타내며, 각 항목은 (key, value)의 형태이다.

key 값은 함수의 형태로 주어져야하므로 람다식을 이용해야한다. x는 sold.items()의 각 항목들이므로 x[0]은 key인 책의 제목이 되고, x[1]은 value인 판매 수가 된다. 그런데 책의 판매 수로 먼저 내림차순 정렬해야하므로, -x[1]을 먼저 적어야하고, 그 다음 책 제목으로 오름차순 정렬하기 위해 x[0]를 적는다.

sorted로 정렬된 후에는 sold에 정렬된 (key, value)들이 배열로 저장된다.

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

[백준] 1236. 성 지키기  (0) 2021.04.15
[백준] 1668. 트로피 진열  (0) 2021.04.15
[백준] 1568. 새  (0) 2021.04.14
[백준] 1543. 문서 검색  (0) 2021.04.14
[백준] 11004. K번째 수  (0) 2021.04.14