Koala - 10기/기초 알고리즘 스터디

[백준/Python] #1302 베스트셀러

dudcks 2023. 3. 15. 16:19

문제

 

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

 

1302번: 베스트셀러

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

www.acmicpc.net


Algorithm

같은 책을 입력 받으면 책의 개수를 +1 해주어야 하기 때문에 딕셔너리를 사용해야겠다고 생각했다.

책을 입력받으면 딕셔너리 D에 저장하는데, 처음 저장되는 경우에는 D[책이름] = 1로 만들어준다. 그 외에는 D[책이름]+=1을 해준다.

입력이 끝나면 arr라는 리스트에 딕셔너리 D의 items()값을 넣어준다. arr = [[책이름, 개수], ...] 이렇게 저장이 된다,

가장 많이 팔린 책이 여러개인 경우에는 사전순으로 가장 앞서는 제목을 출력하면 되므로 arr를 정렬해주는데, 먼저 개수가 큰 것부터 정렬하고, 그 다음은 책이름을 사전순으로 정렬하기 위해 sort(key = lambda x:(-x[1],x[0])으로 해준다. 

arr의 가장 앞에 있는 원소에서 책이름을 출력해야 하므로 arr[0][0]을 출력해주면 된다.


 

 

Code

input = __import__('sys').stdin.readline

n = int(input())
D = {}
for i in range(n):
    t = input().strip()
    if t in D:
        D[t] +=1
    else:
        D[t]=1
arr = list(D.items())
arr.sort(key = lambda x:(-x[1],x[0]))
print(arr[0][0])