Q. 다음과 같은 문자열을 입력받았을 때, 어떤 알파벳이 가장 많이 포함되어 있는지 반환하시오.
"hello my name is sparta"
최빈값 찾기 문제
TIP:
str.isalpha()
를 이용해서 해당 문자열이 알파벳인지 확인할 수 있다.print("a".isalpha()) # True
print("1".isalpha()) # False
.
s = "abcdefg"
print(s[0].isalpha()) # True
alphabet_occurrence_array = [0] * 26
이 배열의 각 원소에 알파벳마다 빈도수를 추가해줘야 합니다. 아스키(ASCII) 코드를 사용해 a일 때는 0번째 원소에 1을 추가하고, b일 때는 1번째 원소에 1을 추가해줘야 해준다.
python to ascii code: ord 함수를 사용해서 파이썬을 아스키 코드로 바꿔준다
# 내장 함수 ord() 이용해서 아스키 값 받기
print(ord('a')) # 97
print(ord('a') - ord('a')) # 97-97 -> 0
print(ord('b') - ord('a')) # 98-97 -> 1
여기서 a의 ord에서 a의 ord 값을 빼면 0이다 = a는 0번째 인덱스 라는 것을 알려줄 수 있는 변환 코드이다.
따라서 b의 ord에서 a의 ord 값을 빼면 1이다 = b는 1번째 인덱스 라는 것을 알려주는 코드
TIP으로 구조를 어느정도 이해했다면, 문제 풀이로!
방법 1: 각 알파벳마다 문자열을 돌면서 몇 글자 나왔는지 확인하는 방법
예) a부터 검사를 하면 순서대로 a 를 찾아서 숫자를 세고, b를 세고•••
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
# 이 alphabet_array에서 알파벳 하나하나 꺼내면서 input과 비교해보기 위해 alphabet_array를 만들어줬다.
# 나온 문자가 있다면 하나씩 빈도수를 추가해서 업데이트!
alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
"t", "u", "v", "x", "y", "z"]
# 최고로 많이 나온 횟수를 저장하기 위한 변수 하나
# 최고로 많이 나온 알파를 저장하기 위한 변수 하나
max_occurrence = 0
max_alphabet = alphabet_array[0]
for alphabet in alphabet_array:
# 초기에는 occurrence라는 변수를 0으로 지정한 다음에
occurrence = 0
# for문을 돌면서
for char in string:
# 문자열에 있는 문자와 동일하다면
if char == alphabet:
# occurrence 를 하나씩 증가시킨다
occurrence += 1
# 만약에 occurrence가 max_occurrence 보다 크면
if occurrence > max_occurrence:
# max_occurrence에 occurrence를 넣고
max_occurrence = occurrence
# max_alphabet에 alphabet을 넣어라
max_alphabet = alphabet
return max_alphabet
result = find_max_occurred_alphabet(input)
print(result)
방법 2: alphabet_occurrence_array를 사용하는 방법
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
alphabet_occurrence_array = [0] * 26
for char in string:
if not char.isalpha():
continue
array_index = ord(char) - ord("a")
alphabet_occurrence_array[array_index] += 1
max_occurrence = 0
max_alphabet_index = 0
for index in range(len(alphabet_occurrence_array)):
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence > max_occurrence:
max_alphabet_index = index
max_occurrence = alphabet_occurrence
print(max_alphabet_index)
return chr(max_alphabet_index + ord("a"))
result = find_max_occurred_alphabet(input)
print(result)
아스키 코드를 이용한 문자를 인덱스로 바꾸는 방법, 인덱스를 문자로 만드는 방법!
.
1. a 라는 문자를 index로 바꾸고 싶을 땐,
a → 0
.
2. a를 먼저 아스키 코드(97)로 변환했었음
a → ord(a) → 97
.
3. 그리고 ord(a)값을 빼줬었다
a → ord(a) → 97 - ord(a)
.
4. 그러면 다시 0을 a로 보내려면 어떻게 해야할까?
먼저 0에 ord(a)값을 더해줘야한다.
0 + ord(a) = 97
.
5. 97을 다시 chr 함수로 감싸주면 a 가 된다.
chr(97) = a