https://www.acmicpc.net/problem/1157
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
Mississipi
?
zZa
Z
import sys
input = sys.stdin.readline
word = input().upper()
max = 0
for w in word:
if word.count(w) > max:
max = word.count(w)
w_max = w
elif w != w_max and word.count(w) == max:
w_max = '?'
print(w_max)
시간 초과래서 input() 대신 sys.stdin.readline()까지 썼고,
max를 변수명으로 쓴 것이 문제가 된 것 같아 max를 M으로 바꿔서도 시도해봤는데
계속 시간 초과가 나온다. 어떻게 해결해야하지..?
word = input().upper()
M = 0
for w in set(word):
if word.count(w) > M:
Mw = w
M = word.count(w)
elif word.count(w) == M:
Mw = '?'
print(Mw)
풀이 1이 시간 초과라는 것은, 풀이 1이 너무 과한 풀이라는 채점 머신의 뜻이 아니었을까?
ㄴ 2022.02.25 금 추가: 풀이가 아니라 구현이 미흡했던 것 같다.
풀이 1에 비해 개선한 것은
논리는 맞았으나 구현이 미흡했다. 아마 1.과 2.에서 시간 초과가 발생한 것 같다.
논리에 이상이 없는 것 같으면 구현에 문제가 있는 것이다.
그러니 쓸모없는 식을 사용하지는 않았는지, 반복 범위가 너무 광범위하지 않은지 생각해보자.