본문 바로가기

알고리즘/백준 문제 풀이

[Python] 9612번 Maximum Word Frequency

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