이 문제는 알파벳 대문자와 소문자 아스키 코드를 모두 활용해야 하는 문제였다.
이 부분만 알고 푼다면, 저번에 푼 10809번 알파벳 찾기 문제와 비슷하게 풀 수 있었다.
#1157 단어 공부
# 우선, 대문자 A의 아스키코드는 65, 소문자 a의 아스키코드는 97이다.
# 즉 대문자 아스키코드에 32를 더해주면 소문자가 되는 것이다.
# 대, 소문자 상관 없이 가장 많이 사용되는 알파벳이므로
# 알파벳 언급 횟수를 셀 배열은 26개의 공간을 가진 한개의 리스트만 있으면 충분하다.
arr = [0 for _ in range(26)]
word = input()
# 10809번 알파벳 찾기 문제처럼 word를 반복문을 돌리며 해당하는 인덱스의 값을 +1 해주면 된다.
# 여기서 중요한 것은, 소문자는 97을 빼줬지만, 대문자의 경우 65를 빼줘야 한다.
# (예: 소문자 'a'는 arr[ord('a') - 97], 'A'는 arr[ord('A') - 65] 위치에 넣어야
# 대소문자 상관 없이 arr[0]의 횟수가 올라간다.
for w in word:
# 97 <= ord(w) <= 122 이면 소문자
# 65 <= ord(w) <= 90 이면 대문자
if 97 <= ord(w) and ord(w) <= 122:
arr[ord(w) - 97] += 1
elif 65 <= ord(w) and ord(w) <= 90:
arr[ord(w) - 65] += 1
# 이제 arr에 들어간 횟수 중 가장 많은 횟수를 가진 알파벳을 구하자.
# 만약 가장 큰 값이 2개라면 '?'을 출력해줘야 한다.
# 그래서 만약 최대값과 같은 값이 나오면 cnt를 1 더해주도록 하고,
# 만약 현재의 최대값보다 큰 값을 만나면 cnt를 1로 초기화해주도록 했다.
max_num = 0
max_idx = 0
cnt = 0
for n in range(len(arr)):
if arr[n] > max_num:
max_num = arr[n]
max_idx = n
cnt = 1
elif arr[n] == max_num:
cnt += 1
# 배열을 다 돈 후, cnt가 1보다 크다면, 즉 최댓값이 여러개라면 ?을 출력한다.
# cnt가 1보다 작거나 같다면(어차피 1보다 작을 수는 없다.)
# 해당 인덱스에 65을 더해서 대문자로 출력한다.
if cnt > 1:
print('?')
else:
print(chr(max_idx + 65))
'개발 공부 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준] 2908. 상수 (0) | 2022.07.19 |
---|---|
[백준] 1152. 단어의 개수 (0) | 2022.07.19 |
[백준] 2675. 문자열 반복 (0) | 2022.07.18 |
[백준] 10809. 알파벳 찾기 (0) | 2022.07.18 |
[백준] 11720. 숫자의 합 (0) | 2022.07.18 |