[TIL] 내일배움캠프 React 과정 2022.11.09

Today I Learned

  • 알고리즘 온라인 강의 1주차 수강
  • 알고리즘 실시간 강의 수강

 

알고리즘 강의 수강 내용

*시간 복잡도
입력값의 길이는 보통 N으로 표현
상수는 신경쓰지 않고 지수만 비교한다.
52N+103->N N²+2->N²

*점근 표기법
최악의 경우: 빅오(Big-O)표기법 O(N)
최선의 경우: 빅 오메가(Big-Ω) 표기법 Ω(1)
빅오 표기법이 중요하다!

어려웠던 부분

파이썬은 들여쓰기가 중요하다

아직 알고리즘이 어려워서 강의 내용대로 코드를 작성했는데 최댓값이 잘못 산출되는 문제가 있었다. 다시 확인해 봐도 틀린 부분이 없는 거 같아서 뭔가 싶었더니 else 부분의 들여쓰기가 잘못된 것이었다. 파이썬에서는 들여쓰기가 중요하다는 것을 또 한 번 배우고 가는 경험이었다.

python 의 for ~ else 문은 “for문에서 break가 발생하지 않았을 경우”의 동작을 else문에 적어주는 것이다.

 

오답

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

정답

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

 

for문 range 함수 이해하기

for index in range(len(alphabet_occurrence_array)):

for문에서 range 안에 len 함수가 들어가는 구조가 이해되지 않아서 구글링을 했다. array의 길이의 개수만큼 인덱스로 이루어진 결괏값을 출력하는 것이었다.

range 이해에 다음 사이트의 도움을 많이 받았다.
https://wikidocs.net/16045

 

알고리즘에 다가가기

강의를 듣고 코드를 전체적으로 다시 보는데 alphabet_occurrence 변수를 따로 지정할 필요가 없지 않나?하는 생각이 들었다. 그래서 if문에 alphabet_occurrence_array[index]를 바로 넣어주었다. 이렇게 (정말 간단한) 수정을 했는데도 함수가 정상적으로 작동되어서 내가 그래도 코드를 어느 정도 이해하고 있었구나 확인할 수 있어서 좋았다.

input = "abadaba"

def find_not_repeating_character(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

    not_repeating_character_array = []
    for index in range(len(alphabet_occurrence_array)):
        # 수정 부분
        # alphabet_occurrence = alphabet_occurrence_array[index]
        # if alphabet_occurrence == 1:
        if alphabet_occurrence_array[index] == 1:
            not_repeating_character_array.append(chr(index + ord('a')))

    for char in string:
        if char in not_repeating_character_array:
            return char

    else:
        return "_"

result = find_not_repeating_character(input)
print(result)

 

느낀 점

오늘부터 알고리즘 강의를 듣기 시작했다. 강사님이 알고리즘과 친해지라고 하는데 도통 친해지지를 않는다. 팀프로젝트하면서 웹페이지 구현할 때는 어렵기는 해도 재미있었는데 알고리즘은 너무 어렵고 재미도 없다. 1주차 5강에서 1차 위기가 오고 1주차 숙제에서 2차 위기를 맞이했다. 일단은 완벽한 이해를 포기하고 강의를 반복해서 듣고 있다.

나의 이해 수준을 객관적으로 평가하자면 강의 듣고 코드 따라 쓰면서 60%는 이해하는 거 같다. 근데 새로운 문제를 스스로 풀라거나, 심지어 방금 강의에서 들은 문제를 혼자서 풀어보라고 해도 어떻게 접근해야 할지 막막한 느낌이다. 일단 포기하지 않고 강의를 듣다 보면 언젠가 스스로 문제를 풀 수 있는 날도 오겠지..? 그리고 오늘은 프로그래머스 사이트에 가입을 했다.