개발일기

#2. 빈도수 큰 알파벳 구하기 (아스키코드) 본문

오류 및 알고리즘정리본

#2. 빈도수 큰 알파벳 구하기 (아스키코드)

츄98 2023. 4. 3. 22:01

아스키코드

 

아스키 코드를 기억할 필요는 없다.

필요할 때마다 찾아서 쓰면 된다.

 

알파벳 문자열에서 가장 많이 나오는 알파벳이 무엇인지 구하는 알고리즘 문제를 풀어보자.

 

1단계. 문자인지 확인하기

파이썬 내장함수  isalpha()를 사용하면 된다.

str.isalpha() 이렇게 사용한다.

 

2단계. 알파벳별로 빈도수를  리스트에 저장하기

알파벳별 빈도수를 저장하기 위해 길이가 26인 0으로 초기화된 배열을 만들고, 

alphabet_occurrence_array = [0] * 26

a일 때는 0번째 원소에 1을 더하고, b일 때는 1번째 원소에 1을 더하는 식으로 빈도수를 저장해보자.

아스키코드와 ord()함수를 사용하여 알파벳을 숫자로 변환하자.

print(ord('b') - ord('a')) # 98-97 -> 1 

print(ord('c') - ord('a')) #99-97 -> 2 

이렇게 몇 번째 원소에 +1을 해야하는지 알 수 있다.

 

def find_alphabet_occurrence_array(string):
    alphabet_occurrence_array = [0] * 26
    for char in string:
        if not char.isalpha():
            continue
        arr_index = ord(char) - ord("a")
        alphabet_occurrence_array[arr_index] += 1

이렇게 알파벳 빈도수가 저장된 alphabet_occurrence_array가 구해진다.

 

3단계. 빈도수가 가장 큰 인덱스 찾기

이제 alphabet_occurrence_array에서 가장 큰 수를 갖는 값이 몇 번째 원소인지 확인해 이를 다시 알파벳으로 바꿔주면, 우리가 찾는 가장 많이 나온 알파벳이 나올 것이다.

 

최댓값 찾기 알고리즘을 활용해서 빈도수가 가장 큰 인덱스를 찾아보자.

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_occurrence = alphabet_occurrence
        max_alphabet_index = index

 

빈도수가 가장 큰 인덱스를 찾았으니, 이를 아스키코드에서 알파벳으로 변환해서 return하면 된다.

이때는 char() 함수를 사용해서 알파벳으로 다시 바꾼다.

return chr(max_alphabet_index + ord('a')) #ord('a')==97,  ord('b')==98, ...