Algorithm/백준

백준(baekjoon) 1157번 단어 공부 풀이 | 파이썬 Python Counter을 활용한 알파벳 빈도 계산

daeunnniii 2021. 2. 11. 22:28
728x90
반응형

단어 공부

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

입력 예제1

Mississipi

출력 예제1

?

입력 예제2

zZa

출력 예제2

Z

풀이

반복문을 사용하는 방법도 존재하지만, 파이썬에서는 collection 모듈의 Counter 클래스를 사용하면 더욱 빠르게 계산할 수 있다.

from collections import Counter
a=input().upper()
count=dict(Counter(a).most_common(2))	#빈도수가 가장 높은 2개를 추출하고 딕셔너리로 변경
try:        	#입력값이 두글자 이상일 때
    if list(count.values())[0]==list(count.values())[1]:	#1위와 2위의 빈도수가 같을 경우
        print("?")
    else:
        print(list(count.keys())[0])			#1위와 2위의 빈도수가 다를 경우
except:     	#입력값이 한글자일 때
    print(list(count.keys())[0])

문제에서 제시된 조건과 같이 upper함수를 사용하여 입력값을 먼저 대문자로 바꿔준다.

그리고 먼저 1위와 2위의 빈도수가 같을 경우와 다른 경우로 나누어 주었고,

입력값이 한글자인 경우에는 오류가 나기 때문에 예외처리로 따로 빼주었다.

728x90
반응형