스파르타코딩클럽 내일배움캠프4기 -9-

JaeSung Lee·2022년 11월 9일
0

내일배움캠프4기

목록 보기
9/24
post-thumbnail

막히는 부분이 왔다...
바로 알고리즘 파트...
어떻게 풀어야할지 감은 오는데
어떻게 적용을 해야될지 감은 안온다.
하... 강의를 무한으로 듣는것 보다는
왜? 이렇게 나오는지 생각을 해야될것같다.

일단 튜터님들한테 4번은 물어봤다.
어떻게 공부를해야되는지 방향이 안잡혀서.

결론은 말로 설명을 할 수 있어야된다.
어떻게 풀지 설명을 한 후
그것을 파이썬 언어로 적용하면 끝...!

오늘 공부한 알고리즘 문제 풀이를 같이 봅시다.

가장 큰 수 찾기


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

딱 보면 6이잖아...! 하지만 컴터는 그딴거 모르죠...!

풀이들어간다.

1.

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


print(find_max_num([3, 5, 6, 1, 2, 4]))

강사님께서 이건 좀 비효율적이라고 어떻게 푸는지알려준 식이다.
숫자끼리 비교해서 큰 값만 남겨놓는것이다.
만약 비교해서 작은값이면 다시 반복문 돌리는식.

---

2.

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


print(find_max_num([3, 5, 6, 1, 2, 4]))

이것도 변수랑 비교해서 큰 값 찾는 식인데
위에 식보다 훨씬 간단하다.

알파벳

알파벳 빈도수 세기


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

    return alphabet_occurrence_array

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

출력화면
[3, 1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 2, 2, 1, 1, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 0]

설명
1. 0을 26개 만드는 코드 작성
2. if not 코드는 false 일때 실행이 됨. 만약 false면 continue를 받는다. 그럼 알파벳 찾을때까지 계속 반복됨.
3. .isalpha() 코드는 문자열이 알파벳인지 확인하는 코드
4. 알파벳 찾으면 아스키 코드 적용해서 빼준다. a 아스크 코드는 97인데 거기에 b 아스크 코드인 98을 빼주면 숫자 1이 남는다.
5. 마지막 alphabet_occurrence_array[arr_index] += 1 코드는, 1번에 있는 0에다 알파벳 나올때마다 숫자 1씩 더해주는 코드


---

최빈값 구하기


1.
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
print(result("Hello my name is sparta"))

출력
a

설명
알파벳 하나씩 꺼내서 char랑 같으면 occurrence 하나씩 증가시킨다. 그리고선 최대로 많이 나오는 숫자에 알파벳 나오면 끝.

---

2.

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(result("Hello my name is sparta"))

출력
a

설명
아까 했던 알파벳 빈도수 코드 복붙한후, 인덱스코드로 인덱스만듬.
알파벳 빈도수 꺼낸다. 그리고선 아스키코드와 마찬가지로 chr코드로 변환시킴.




오늘은 여기까지 하겠다.
솔직히 잘이해가안간다...
빡친다... 술마시고싶다...

profile
정말 최선을 다하겠습니다.

1개의 댓글

comment-user-thumbnail
2022년 11월 10일

감정이 고스란히 저에게도 전해지는 느낌...
저도 비슷했기때문에 너무 공감 갑니다 ㅠㅠ
그래도 포기하지말고 화이팅이에요!

답글 달기