알고리즘

백준 알고리즘 1157 [파이썬]

Brad Daeho Lee 2021. 3. 6. 23:27

 

 

 

 

배운 내용

이 문제는 처음에 풀어서 답이 나왔는데 시간초과로 인해서 다시 세팅을 해야했다. 원하는 답만 나온다고해서 문제를 푼게 아니라 내가 짠 코드가 범위안에서 돌아가는데 효율적인지도 생각해봐야겠다.

 

set 내장 함수를 이용해서 input된 단어안에있는 공통되는 알파벳을 없애고 하나씩만 저장할 수 있다. 최빈값을 구할 때 사용하기 좋은 함수이다.

 

 

문제 

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

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

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

 

문제풀이

lst = []
# 알파벳이 대문자로 통일되어야되기 때문에 .upper()사용
word = input().upper()
# 공통되는 알파벳을 삭제하고 하나씩만 가지고있기 위해 set을 사용했다.
set_word = list(set(word))
# word안에 해당하는 알파벳이 몇개인지 확인하고 전 알파벳보다 많으면 lst에 저장
cnt = 0
for i in set_word:
  cnt_1 = word.count(i)
  if cnt_1 >= cnt:
    if cnt_1 > cnt:
      lst =[]
    cnt = cnt_1
    lst.append(i)
# 만약에 lst에 2개이상의 알파벳이 있으면 "?"입력
if len(lst) > 1:
  print("?")
else:
  print(lst[0])