Algorithm Study/Python

[백준 파이썬] #1302 베스트셀러

728x90
반응형

Siver IV

# 1302 베스트 셀러

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

 

1302번: 베스트셀러

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

www.acmicpc.net

 

풀이

N = int(input())

bs = [input() for i in range(N)]
sbs = list(sorted(bs))

cnt=[]

for i in sbs:
    cnt.append(bs.count(i))

print(sbs[cnt.index(max(cnt))])

 

배운 내용

  • dictionary 자료형을 이용할 수 있다
    • 딕셔너리는 key, value 형태로 이루어져있다.
    • items() 메소드를 사용하면 key, value를 여러개의 튜플로 이루어진 리스트로 뽑아 낼 수 있다.
    • 딕셔너리는 리스트 사용 때와 달리 0을 미리 할당할 필요는 없다.
n = int(input())
books = {}

for _ in range(n):
    book = input()
    if book not in books:
        books[book] = 1
    else:
        books[book] += 1
        
max_fraq = max(books.values())

best_seller = []

for book, number in books.items():
    if number == max_fraq:
        best_seller.append(book)
        
print(sorted(best_seller)[0])
  • max('key=count') 옵션을 이용하였다.

 

추가적으로 알게 된 내용

  • enumerate() 함수 : for 구문이 몇번 회전되었는 지를 이용할 수 있는 함수, 인덱스와 원소를 동시에 얻는 방법
  • min, max함수는 옵션으로 key를 사용할 수 있다.
    • key=abs 일 경우, 절댓값을 기준으로 min, max값을 찾아낸다.
    • key = lambda x : x % 3과 같이 기입할 경우, 3으로 나눴을 때 나머지 값을 기준으로 min, max값을 찾아 낼 수도 있따.