728x90
https://www.acmicpc.net/problem/9612
24/11/30
간단한 실버 문제다.
문제 접근 방식:
각 단어의 빈도 수를 나타내는 딕셔너리 $D$를 선언해준다.
이후 각 단어가 새로 나오면, 그 단어를 딕셔너리에 새롭게 넣고 값을 $1$로 설정, 이미 나왔던 단어였다면 기존 값을 $1$ Increasing하도록 설정했다.
이후 가장 자주 나오는 빈도수를 가진 단어, 그 중에서도 가장 사전순으로 뒤에 있는 단어와 그 빈도수를 출력하면 되는데, 이건 그냥 $D$에 있는 각 단어의 빈도수를 계속 비교하면서 갱신하는 형식으로 구현했다.
파이썬에서는 두 문자열이 사전 순인지를 그냥 < 연산자로 비교할 수 있기 때문에 이를 통해 구현했다.
맨 처음에는 파이썬 collections모듈의 Counter자료형을 쓸 까 생각했지만, Counter자료형의 most_common()메서드는 사전 순으로 가장 뒤에 있는 단어를 출력한다는 사실을 보장하지 못하므로 그냥 구현했다.
아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.
더보기
# 9612번 Maximum Word Frequency
# 구현
import sys
input = sys.stdin.readline
N = int(input())
D = dict()
for _ in range(N):
I = input().rstrip()
if I in D:
D[I] += 1
else:
D[I] = 1
answord, ansfreq = '', 0
for word, freq in D.items():
if freq > ansfreq:
answord = word
ansfreq = freq
elif freq == ansfreq and word > answord:
answord = word
ansfreq = freq
print(answord, ansfreq)
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[C++] 1007번 벡터 매칭 (0) | 2024.12.27 |
---|---|
[Python] 32871번 돌 게임 nm (0) | 2024.12.03 |
[Python] 8094번 Canoes (0) | 2024.11.29 |
[Python] 32823번 채굴권 분할 (0) | 2024.11.28 |
[Python] 32840번 Triangle (0) | 2024.11.27 |