BOJ [Bronze I] 단어 공부 - 1157

다히·2023년 1월 11일
0

BOJ

목록 보기
1/45

문제 링크

분류

구현(implementation), 문자열(string)

문제 설명

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

입력

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

출력

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

입력 예시

Mississipi

출력 예시

?

내 코드

from collections import Counter
import sys
input = sys.stdin.readline
#print = sys.stdout.write

word = list(input().rstrip().lower())
counter = Counter(word).most_common()

if len(counter) == 1:
    print(word[0].upper())
else:
    if counter[0][1] == counter[1][1]:
        print("?")
    else:
        print(counter[0][0].upper())

아이디어

  • 빈도수 계산하기에 좋은 Counter을 썼다.
  • 입출력 시간 줄이기 위해 print = sys.stdout.write 쓰는 습관을 들이자 했는데, counter을 확인할 겸 출력하려 하니 write는 str만 출력 가능하다는 오류 메시지가 떴다! 어차피 문제에서 저렇게 튜플 리스트를 출력할 일은 없으니 상관 없지만 알고 있어야 할 것 같다.
  • 최대 빈도수 중복값 처리를 위해 첫 번째 빈도수와 두 번째 빈도수를 비교했는데, 이때 문자열 길이가 1일 때는 두 번째 빈도수가 존재하지 않는다는 걸 처음에 놓쳐서 한 번 틀렸다.
  • rstrip()을 안 해서 list에 '\n'이 저장되고, '\n'의 빈도수도 계산돼서 문자열 길이 1일 때 또 한 번 틀렸다~

0개의 댓글