유형 : 탐색
[예제]
5
top
top
top
top
kimtop
[출력]
top
1. 내 풀이
import sys
N = int(sys.stdin.readline())
_list = []
for _ in range(N):
book = sys.stdin.readline().strip()
_list.append(book)
_list = sorted(_list)
_set = set(_list)
_list2 = list(_set)
_list2 = sorted(_list2)
max = 0
max_book = 0
for i in range(len(_list2)):
cnt = _list.count(_list2[i])
if cnt > max:
max = cnt
max_book = _list2[i]
print(max_book)
▷ sys.stdin.readline()을 사용할 때 개행문자를 자동으로 없애기 위해 뒤에 strip()을 붙였다. (참고)
▷ 책 제목을 입력받은 리스트를 집합 자료형으로 변환시켜(set) 중복인 책을 없애주었다. 그 뒤, 책이 얼마나 입력되었는지 count()로 개수를 셀 수 있었다.
▷ 가장 많이 입력된 책만 출력하면 되므로, 변수 max를 이용해 최대값과 그에 맞는 책제목을 따로 뽑았다.
2. 다른 풀이
출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 올인원 패키지 Online
** 핵심 아이디어
1. 가장 많이 등장한 문자열을 출력하는 문제와 동일하다.
2. 등장 횟수를 계산할 때는 파이썬의 Dictionary 자료형을 이용하면 효과적이다.
n = int(input())
books = []
for _ in range(n):
book = input()
if book not in books:
books[book] = 1
else:
books[book] += 1
target = max(books.values())
array = []
for book, number in books.items():
if number == target:
array.append(book)
print(sorted(array)[0])
문제 출처 : https://www.acmicpc.net/problem/1302
반응형
'Python' 카테고리의 다른 글
[백준] 1236번 : 성 지키기 (0) | 2022.01.04 |
---|---|
[백준] 1668번 : 트로피 진열 (0) | 2022.01.03 |
[백준] 1568번 : 새 (0) | 2022.01.03 |
[백준] 1543번 : 문서 검색 (0) | 2022.01.03 |
[백준] 11004번 : K번째 수 (0) | 2022.01.03 |
댓글