Jinny Kong’s blog
19th KOALA 3주차 본문
코알라 3주차~!! ( ᐢ• 0 •ᐢ )
이번주도 본가 미룬이 이슈로 몰아서 풀었다 헤헤... ⌯◕ᴗ<⌯ಣ
담주부턴 정말로... 미리미리 해야지...!!!! (진짜임)
오늘 소개할 문제는 바로..!!
백준 1302번 : 베스트셀러
오늘 팔린 책의 개수 N과 팔린 책들의 제목이 주어진다. 이에 따라 가장 많이 팔린 책의 제목을 출력하는 문제이다. 만약 가장 많이 팔린 책이 여러 권 있을 경우, 사전 순으로 가장 앞서는 제목을 출력하면 된다.
먼저 소개할 코드는 내가 직접 푼 코드인데 효율성을 고려해 짠 두번째 코드에 비하면 조금 코드 길이가 길다..! (•̅ ·͜· •̅。𖠗)
1. 직접 딕셔너리로 카운트 ¢(・ω・`)
N = int(input())
words = []
for i in range(num):
word = input()
words.append(word)
book_count = {}
for word in words:
if word in book_count:
book_count[word] += 1
else:
book_count[word] = 1
max_count = max(book_count.values())
# 가장 많이 팔린 책들 중 사전순으로 가장 앞선 제목 찾기
most_common = [word for word in book_count if book_count[word] == max_count]
print(min(most_common))
처음 이 문제를 풀었을 때는 다음과 같은 방식으로 접근했다. 우선 책의 제목들을 저장할 리스트 words를 만든 후, 입력받은 책 제목들을 이 리스트에 저장했다. 그 다음, book_count라는 딕셔너리를 만들어 리스트를 순회하며 해당 제목이 이미 등장한 적이 있다면 개수를 1 증가시키고, 처음 나오는 제목이라면 1로 초기화하는 방식으로 각각의 책 제목이 몇 번 등장했는지를 기록했다. 이후에는 book_count의 값들 중 가장 큰 값을 찾아, 가장 많이 팔린 책 제목들 중에서 사전순으로 가장 앞선 제목을 출력하도록 코드를 작성했다. 하지만 반복문과 조건문이 많아 다소 길어지고, 코드가 반복되는 부분도 생긴다. 。°꒰ ՞ ´ ᗣ`°꒱°。
2. collections의 Counter 사용 ¢(・ω・`)
from collections import Counter
num = int(input())
words = []
for i in range(num):
word = input()
words.append(word)
counter = Counter(words)
max_count = max(counter.values())
# 가장 많이 팔린 책들 중 사전순으로 가장 앞선 제목 찾기
most_common = [word for word in counter if counter[word] == max_count]
print(min(most_common))
조금 더 효율적인 방법이 있을까 싶어 찾아보다가 collections 모듈의 Counter를 알게 되었다. Counter는 리스트 요소들의 등장 횟수를 자동으로 세어주는 유용한 도구라고 한다. 책 제목들을 입력받아 words 리스트에 저장한 후, Counter(words)만으로 각 제목이 몇 번 등장했는지를 쉽게 세어줄 수 있다. 이후에는 첫 번째 코드와 동일하게 가장 많이 팔린 횟수를 구하고, 그에 해당하는 제목들 중 사전순으로 가장 앞선 것을 출력하면 된다. 이 방식은 코드가 훨씬 간결해지는 것 같다! 게다가 Counter는 내부적으로 최적화되어 있어 성능 면에서도 좋은 선택이라고 한다!! ( •́ ▾ •̀ )
C++로 알고리즘 문제를 풀 때는 리스트랑 벡터를 구분해서 써야 해서 좀 번거로웠는데, 확실히 파이썬은 함수도 다양하고 리스트도 유연하게 쓸 수 있어서 너무 좋은 것 같다 ㅎㅎ "이게 되려나?" 싶은 것들이 파이썬에서는 거의 다 돼서 진짜 편한 느낌... 왕편함!!! ( ˶'ᵕ'˶)ෆ 여튼 3주차도 끗~ 4주차는 꼬옥 미리 하쟈!! ⌯ ‘ ᵕ ‘ ⌯
'KOALA' 카테고리의 다른 글
| 19th KOALA 8주차 (2) | 2025.08.24 |
|---|---|
| 19th KOALA 4주차 (5) | 2025.07.27 |
| 19th KOALA 2주차 (0) | 2025.07.13 |
| 19th KOALA 1주차 (0) | 2025.07.06 |
| 18th Koala 8주차 (0) | 2025.05.25 |