# 대소문자 구분이 없으니, upper()로 대문자로 변환 후 시작
word = input().upper()
count_w = {}
# 이중 for문으로 각 글자별 개수를 딕셔너리에 담아줌
for w in word:
count_w[w] = 0
for i in range(len(word)):
if w == word[i]:
count_w[w] += 1
# 딕셔너리의 value(개수) 리스트를 내림차순으로 정렬한 리스트 할당
results = sorted(list(count_w.values()), reverse=True)
# 최댓값이 2개 이상일 경우 ? 출력
if results[0] == results[1]:
print('?')
# 아닌 경우 딕셔너리에서 for문으로 최댓값을 value값으로 갖고 있는 key 출력
else:
for key, value in count_w.items():
if value == results[0]:
print(key)
# 처음부터 입력값을 받아 대문자로 만든다.
word = input().upper()
# 입력값에서 중복을 제거한 리스트를 만든다.
unq = list(set(word))
# 각 문자의 수를 세는 리스트를 만든다.
# unq를 돌면서 해당 문자가 word에 몇 개 있는지를 cnt리스트에 담는다.
cnt = []
for i in unq:
cnt.append(word.count(i))
# cnt에서 최댓값이 2개 이상인 경우 ?를 출력한다
# 아닌 경우 cnt의 최댓값의 인덱스를 unq에서 찾아 출력한다.
if cnt.count(max(cnt)) > 1:
print('?')
else:
print(unq[cnt.index(max(cnt))])
중복 개수를 세어야 하니 절대로 중복제거를 하면 안된다는 생각이 패착이었다...
max() 함수는 중복값이 안나온다는 것만으로 사용하지 않았었는데,
max()값을 count() 함수의 인자로 넣어주면, 최댓값이 몇 개인지 알 수 있다.