문제 설명)
다음과 같은 문자열을 입력받았을 때, 어떤 알파벳이 가장 많이 포함되어 있는지 반환하시오
"hello my name is sparta"
힌트)
1) str.isalpha() : 문자가 알파벳인지 아닌지 반환하는 함수. return True or False
print("a".isalpha()) # True
print("1".isalpha()) # False
s = "abcdefg"
print(s[0].isalpha()) # True
2) 알파벳 별로 빈도수를 리스트에 저장하기
길이가 26이고 0으로 초기화된 배열을 선언한 후, 이 배열의 각 원소에 알파벳마다 빈도수를 추가
ex) 알파벳을 순서대로 나열했을 때 a는 첫번째로 등장함
컴퓨터언어에서는 시작이 1이아닌 0이기 때문에
a의 위치는 0
b -> 1, c -> 2, ... z -> 25
a일 때는 0번째 원소에 1을 추가, b일 때는 1번째 원소에 추가, ...
그럼 위치를 얻어낼 수 있는 방법은..??
ASCII코드를 이용해서 위치를 얻어낼 수 있다..!
odr() : 문자를 아스키코드로 변환해줌
# 내장 함수 ord() 이용해서 아스키 값 받기
print(ord('a')) # 97
print(ord('a') - ord('a')) # 97-97 -> 0
print(ord('b') - ord('a')) # 98-97 -> 1
ord(알파벳) - ord('a')를 이용해 알파벳의 위치를 얻어낼 수 있음!
* 알파벳 빈도수 세기 *
def find_alphabet_occurrence_array(string):
alphabet_occurrence_array = [0] * 26
for alphabet in string:
if alphabet.isalpha(): #isalpha: 알파벳인지 아닌지 판단. T/F
index = ord(alphabet) - ord('a') #ord: ASCII Code로 바꿔줌
alphabet_occurrence_array[index] += 1
return alphabet_occurrence_array
print(find_alphabet_occurrence_array("hello my name is sparta"))
#[3, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 2, 2, 1, 1, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 0]
방법1)
각 알파벳마다 문자열을 돌면서 몇 글자 나왔는지 확인
만약 그 숫자가 저장한 알파벳 빈도 수보다 크면, 그 값을 저장하고 제일 큰 알파벳으로 저장
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
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 #현재 알파벳에 대한 횟수
for char in string:
if char == alphabet:
occurrence += 1
if occurrence > max_occurrence:
max_alphabet = alphabet
max_occurrence = occurrence
return max_alphabet
result = find_max_occurred_alphabet(input)
print(result)
#a
방법2)
각 알파벳의 빈도수를 alphabet_occurrence_list 라는 변수에 저장
각 문자열을 돌면서 해당 문자가 알파벳인지 확인하고, 알파벳을 인덱스 화 시켜 각 알파벳의 빈도수를 업데이트
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
arr_index = ord(char) - ord('a')
alphabet_occurrence_array[arr_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_occurrence = alphabet_occurrence
max_alphabet_index = index
return chr(max_alphabet_index + ord("a"))
result = find_max_occurred_alphabet(input)
print(result)
#a
나의 풀이)
각 알파벳의 빈도수를 alphabet_occurrence_list 라는 변수에 저장
해당 값이 저장되어있는 위치를 반환하는 index() 함수를 이용해서 위치 찾기
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
max_count = 0 #가장 많이 나온 횟수
occurred_alphabet_count = [0] * 26 #등장한 횟수 값 저장하는 배열
for alphabet in string:
if alphabet.isalpha():
index = ord(alphabet) - ord('a')
occurred_alphabet_count[index] += 1
for num in occurred_alphabet_count:
if num > max_count:
max_count = num
max_index = occurred_alphabet_count.index(max_count) #index()
ascii_num = max_index + ord('a')
return chr(ascii_num)
result = find_max_occurred_alphabet(input)
print(result)
#a
'알고리즘' 카테고리의 다른 글
알고리즘 더 풀어보기 (1) (0) | 2021.08.17 |
---|---|
점근 표기법 (0) | 2021.08.15 |
공간 복잡도 판단하기 (0) | 2021.08.13 |
시간 복잡도 판단하기 (0) | 2021.08.11 |
알고리즘과 친해지기 - 최대값 찾기 (0) | 2021.08.09 |