구현 문제입니다.
다양한 방법으로 풀 수 있지만, 저는 배열과 아스키코드 값을 이용한 인덱스를 통해 풀었습니다.
브론즈 1
시간 제한 | 메모리 제한 |
---|---|
2 초 | 128 MB |
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
Mississipi
?
zZa
Z
z
Z
baaa
A
입력 문자를 upper()를 통해 모두 대문자로 변환시켜주었습니다.
cnt는 A부터 Z까지 26개의 알파벳 수를 카운트 하기 위한 배열입니다.
입력 문자를 탐색하며 ord(i) - 65를 통해 A는 0, Z는 25 인덱스로 cnt에 카운트됩니다.
count()를 통해 빈도수가 가장 큰 값의 개수를 구하고, 2개 이상이면 ?를, 아니면 해당 알파벳을 출력합니다.
알파벳을 출력할 시에는, 빈도수가 가장 큰 값의 인덱스를 찾고, 처음과 반대로 65를 더한 후 아스키값을 통한 문자로 치환을 하면 해당 알파벳이 대문자로 출력됩니다.
word = input().upper() # 대문자 기준이기에 입력 값을 모두 대문자로 변환
cnt = [0] * 26 # A부터 Z까지의 수를 담을 배열
for i in word: # 입력 문자 탐색
cnt[ord(i) - 65] += 1 # cnt의 해당 문자에 맞는 인덱스 값 + 1
# cnt에서 가장 많은 빈도 수의 알파벳이 2개 이상이면 ?, 아니면 해당 알파벳 출력
print('?' if cnt.count(max(cnt)) > 1 else chr(cnt.index(max(cnt)) + 65))