max와 최빈값 찾기 문제 풀이

devmonkey·2021년 3월 8일
0

문제1 max_num 찾기

첫번째 방법
input = [3, 5, 6, 10, 2, 15]
# 3부터 시작해서 다른 숫자들과 비교

def find_max_num(array):
    for num in array:
        # array에 있는 각각의 변수를 num에 담아 줌
        for compare_num in array:
            # 비교할 변수들을 뽑기위해 한번 더 사용 된 for문
            # num과 compare_num을 하나하나씩 뽑으면서 비교하는 이중반복문 구조
            if num < compare_num:
                break
                # if문을 나가고 다음 숫자로 넘어감
        else:
            # for문이 다 끝날때까지 한번도 beak되지 않았다면 else실행
            return num


result = find_max_num(input)
print(result)
두번째 방법
# 지정변수로 fins_max_num
input = [3, 5, 6, 1, 2, 4]


def find_max_num(array):
    max_num = array[0]
    #max_num에 각 숫자들을 넣어 줌
    for num in array:
        if num > max_num:
            max_num = num
    return max_num


result = find_max_num(input)
print(result)

문제2 최빈값 찾기

첫번째 방법
# 각 알파벳마다 문자열을 돌면서 몇 번 나왔는지 확인
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", "w", "x", "y", "z"]

    max_occurrence = 0
    # max 횟수 저장 변수
    max_alphabet = alphabet_array[0]
    # max 알파벳 저장 변수
    for alphabet in alphabet_array:
        occurrence = 0
        for char in string:
            if char == alphabet:
                occurrence += 1

        if occurrence > max_occurrence:
            max_occurrence = occurrence
            max_alphabet = alphabet

        return max_alphabet

result = find_max_occurred_alphabet(input)
print(result)
두번째 방법

우선 아래의 코드를 돌리면 input값에서 각 알파벳의 빈도수를 반환해준다. 두번째 방법에서 이 코드를 활용해보자.

def find_alphabet_occurrence_array(string):
    alphabet_occurrence_array = [0] * 26
    #알파벳 별 빈도수를 저장하기 위한 길이가 26인 0으로 초기화된 배열
    for char in string:
        if not char.isalpha():
        #str.isalpha() 를 이용하면 해당 문자열이 알파벳인지 확인 가능
            continue #반복문의 다음index로 즉, 다음 문자를 확인 해보게 함
        #아래는 char가 알파벳인 경우에만 실행
        arr_index = ord(char) - ord("a")
        #ord함수: python char to ascii code
        #ord("a")=97 (예: H=104-97=7번째 인덱스)
        #arr_index=배열의 index값이 됨
        alphabet_occurrence_array[arr_index] += 1
        #alphabet_occurence_array에 arr_index값을 하나씩 증가시켜 줌
        #각 char에 따른 arr_index를 구하고 그 arr_index를 가진 alphabet_occrence_array의 값을 하나하나 증가시켜 줌
    return alphabet_occurrence_array
print(find_alphabet_occurrence_array("hello my name is sparta"))


현재의 결과 alphabet_occurrence_array에서 가장 큰 값을 찾아야하니, 위의 코드에서 return을 삭제해준다.
이제 alphabet_occurrence_array를 하나하나 비교하면서 가장 많이 나왔던 알파벳을 찾아준다.

def find_alphabet_occurrence_array(string):
    alphabet_occurrence_array = [0] * 26
    #알파벳 별 빈도수를 저장하기 위한 길이가 26인 0으로 초기화된 배열
    for char in string:
        if not char.isalpha():
        #str.isalpha() 를 이용하면 해당 문자열이 알파벳인지 확인 가능
            continue #반복문의 다음index로 즉, 다음 문자를 확인 해보게 함
        #아래는 char가 알파벳인 경우에만 실행
        arr_index = ord(char) - ord("a")
        #ord함수: python char to ascii code
        #ord("a")=97 (예: H=104-97=7번째 인덱스)
        #arr_index=배열의 index값이 됨
        alphabet_occurrence_array[arr_index] += 1
        #alphabet_occurence_array에 arr_index값을 하나씩 증가시켜 줌
        #각 char에 따른 arr_index를 구하고 그 arr_index를 가진 alphabet_occrence_array의 값을 하나하나 증가시켜 줌

    max_occurrence = 0
    # 가장 많이 나온 알파벳의 빈도 수 저장 변수
    max_alphabet_index = 0
    # 가장 많이 나온 알파벳의 인덱스 저장 변수
    for index in range(len(alphabet_occurrence_array)):
        alphabet_occurrence = alphabet_occurrence_array[index]
        # 현재 index가 0이라면 alphabet_occurrence는 3

        if alphabet_occurrence > max_occurrence:
            max_alphabet_index = index
            max_occurrence = alphabet_occurrence
    return chr(max_alphabet_index + ord("a"))
    # 숫자를 알파벳으로 변환

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

문제풀이 출처:[스파르타 코딩클럽 알고리즘 강의1주차4,5강]

profile
매일 배우고 성장 중 담는 개인기록

0개의 댓글

Powered by GraphCDN, the GraphQL CDN