본문 바로가기
알고리즘/자료구조와 알고리즘

1주차_알고리즘과 친해지기

by 수쨔앙 2022. 9. 16.

최댓값 찾기

 

첫 번째 방법

각 숫자마다 모든 다른 숫자와 비교해서 최댓값인지 확인한다.

만약 다른 모든 값 보다 크다면 반복문 중단한다.

이중 for문을 이용해서 구현

input = [3, 5, 6, 1, 2, 4]

def find_max_num(array):
    for num in array:
        for compare_num in array:
            if num < compare_num:
                break
        else:
            return num


print("정답 = 6 / 현재 풀이 값 = ", find_max_num([3, 5, 6, 1, 2, 4]))
print("정답 = 6 / 현재 풀이 값 = ", find_max_num([6, 6, 6]))
print("정답 = 1888 / 현재 풀이 값 = ", find_max_num([6, 9, 2, 7, 1888]))


# for 문에서 break가 발생하지 않았을 경우 else 사용한다

 

 

두 번째 방법

최댓값을 저장할 변수를 만들고 배열을 돌아가면서 그 변수와 비교한다.

값이 더 크다면 그 변수에 대입한다.

input = [3, 5, 6, 1, 2, 4]

def find_max_num(array):
    max_num = array[0]
    for num in array:
        if num > max_num:
            max_num = num
    return max_num


print("정답 = 6 / 현재 풀이 값 = ", find_max_num([3, 5, 6, 1, 2, 4]))
print("정답 = 6 / 현재 풀이 값 = ", find_max_num([6, 6, 6]))
print("정답 = 1888 / 현재 풀이 값 = ", find_max_num([6, 9, 2, 7, 1888]))

 

 


 

최빈값 찾기

 

최빈값을 찾기 위해 각 알파벳의 빈도수를 먼저 찾아주자

def find_max_occurred_alphabet(string):
    # 이 부분을 채워보세요!
    return "a"


result = find_max_occurred_alphabet(input)
print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta"))
print("정답 = a 현재 풀이 값 =", result("Sparta coding club"))
print("정답 = s 현재 풀이 값 =", result("best of best sparta"))

 

alphabet 별 빈도수를 저장하기 위한 길이가 26인 0으로 초기화 된 배열을 만들어주자

def find_max_occurred_alphabet(string):
    alphabet_occurrence_array = [0] * 26

 

그리고 for 문으로 한글자씩 돌려줄건데

이때 알파벳인지 아닌지 확인해줘야한다.

내장함수 str.isalpha()를 사용하자!

def find_max_occurred_alphabet(string):
    alphabet_occurrence_array = [0] * 26
    for char in string:
        if char.isalpha() == True:

 

거짓이면 넘겨주고 참이면 알파벳에 맞는 인덱스 값을 찾아서 1을 더해줘야하는데

그 값은 ord()를 이용해서 알파벳을 아스키코드로 바꿔주고, ord('a')의 값을 빼주면

해당 알파벳의 index 값이 나온다! 

그 값을 1 더해주자

def find_max_occurred_alphabet(string):
    alphabet_occurrence_array = [0] * 26
    for char in string:
        if char.isalpha() == True:
            arr_index = ord(char)-ord('a')
            alphabet_occurrence_array[arr_index] += 1
        else:
            continue
    return alphabet_occurrence_array

print(find_max_occurred_alphabet("hello my name is sparta"))

 

이렇게 되면 알파벳별로 빈도수를 리스트에 저장하기 끝!

 

이제 최빈값을 구해줘보자

def find_max_occurred_alphabet(string):
    alphabet_occurrence_array = [0] * 26
    for char in string:
        if char.isalpha() == True:
            arr_index = ord(char)-ord('a')
            alphabet_occurrence_array[arr_index] += 1
        else:
            continue
    max_num = alphabet_occurrence_array[0]
    for num in alphabet_occurrence_array:
        if num > max_num:
            max_num = num
    a = chr(alphabet_occurrence_array.index(max_num)+97)
    return a


result = find_max_occurred_alphabet

print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta"))
print("정답 = a 현재 풀이 값 =", result("Sparta coding club"))
print("정답 = s 현재 풀이 값 =", result("best of best 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"]
    # a 랑 문자열이랑 전부 비교해주기 위함

    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
print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta"))
print("정답 = a 현재 풀이 값 =", result("Sparta coding club"))
print("정답 = s 현재 풀이 값 =", result("best of best 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
print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta"))
print("정답 = a 현재 풀이 값 =", result("Sparta coding club"))
print("정답 = s 현재 풀이 값 =", result("best of best sparta"))

 

728x90

댓글