알고리즘과 친해지기 2 - 알파벳 빈도수 세기
: 문자열을 입력 받았을 때 어떤 알파벳이 가장 많이 포함되어 있는 지 반환한다.
-> 문자인 지 확인하는 방법
: 파이썬의 내장 함수 str.isalpha()를 이용하면 해당 문자열이 알파벳인 지 확인 할 수 있다.
-> 알파벳 별로 빈도수를 리스트에 저장하기
: 우선 알파벳 빈도수를 저장하기 위한 길이가 26인 0으로 초기화된 배열을 만든다.
-> 아스키 코드를 사용해서 문자를 숫자로 변환 하거나 숫자를 문자로 변환 할 수 있다.
문자를 아스키 코드로 변환 할 때는 "python char to ascii code"라고 검색을 해보면 ord 함수를 사용하라고 나온다.
1) 의사코드(수도코드)
- 알파벳의 빈도 수를 담은 배열
alphabet_occurrence_array = [0] * 26
- 문자인 지 아닌 지 구별하는 함수 => str.isalpha()를 사용해서 문자이면 true를 반환, 문자가 아니면 false를 반환
- 문자를 숫자(아스키 코드)로 변환하는 함수 => ord("문자")
- 해당 문자의 index 위치를 찾아서 1씩 더한다. => ord('a') - ord('a')를 하면 0이라는 index 값이 나온다.
2) 코드 구현
def find_alphabet_occurrence_array(string):
# 알파벳의 빈도 수를 담을 배열
alphabet_occurrence_array = [0] * 26
# 문자인 지 아닌 지 구별하는 함수 -> str.isalpha()
# 문자를 숫자(아스키 코드)로 변환하는 함수 -> ord(str)
# 해당 문자의 index 위치를 찾아서 1씩 더한다.
for str in string:
if str.isalpha():
alphabet_occurrence_array[ord(str)-ord('a')] += 1
return alphabet_occurrence_array
print(find_alphabet_occurrence_array("hello my name is sparta"))
선생님의 풀이 방법
def find_alphabet_occurrence_array(string):
# 알파벳의 빈도 수를 담을 배열
alphabet_occurrence_array = [0] * 26
for char in string:
if not char.isalpha(): # 문자가 아니라면
continue # 반복문을 건너뛴다.
else: # 문자라면
arr_index = ord(char) - ord('a')
alphabet_occurrence_array[arr_index] += 1
return alphabet_occurrence_array
print(find_alphabet_occurrence_array("hello my name is sparta"))
'항해 중 > 알고 보면 알기 쉬운 알고리즘' 카테고리의 다른 글
공간 복잡도 판단하기 (0) | 2021.11.12 |
---|---|
시간 복잡도 판단하기 (0) | 2021.11.12 |
최빈값 찾기 (0) | 2021.11.12 |
최댓값 찾기 (0) | 2021.11.12 |
알고리즘이란? (0) | 2021.11.12 |
댓글