문제정리:
문자열을 입력받고 문자열 중에서 가장 많이 사용된 알파벳을 출력하는 문제.
가장 많이 사용된 알파벳의 개수가 1개가 아닌 경우에는 물음표를 출력.
ex)
Mississipi
예제 출력 1
?
예제 입력 2
zZa
예제 출력 2
Z
예제 입력 3
z
예제 출력 3
Z
예제 입력 4
baaa
예제 출력 4
A
내가 푼 방법
s = input().upper()
answer = [ 0 for i in range(26) ]
for i in S:
answer[ord(i)-65] += 1
if(int(answer.count(max(answer)) == 1)):
print(chr(answer.index(max(answer))+65))
else:
print("?")
다른코드 (영지영지 풀이 참고) - 출처 : https://ooyoung.tistory.com/70
words = input().upper()
unique_words = list(set(words)) # 입력받은 문자열에서 중복값을 제거
cnt_list = []
for x in unique_words :
cnt = words.count(x)
cnt_list.append(cnt) # count 숫자를 리스트에 append
if cnt_list.count(max(cnt_list)) > 1 : # count 숫자 최대값이 중복되면
print('?')
else :
max_index = cnt_list.index(max(cnt_list)) # count 숫자 최대값 인덱스(위치)
print(unique_words[max_index])
나 처럼 짠 사람은 없는 것 같다.
이건 내가 더 잘 짠 것 같음. 아님 말고.
영지영지님 코드 후기
set을 이용하는 것. 그리고 set의 워드를 for문을 돌며 원래 단어에서 그 단어 출현빈도를 다시 카운트하고 카운트한 걸 다시 카운트 리스트에 담는 작업. 내 머리로는 직관적으로 딱 생각나는 방법은 아니다.
내 코드
알파벳이니까 26개 리스트 하나 냅두고 단어 한방에 쭉 돌면서 빈도 카운트하고, 거기서 max값을 찾고 출력해주는 것. 이게 좀 더 직관적이지 않나 싶다. 물론 아스키를 이용한다는 점에서 가독성은 좀 떨어질 수 있겠네.