[TIL] 파이썬 문법 기초/ 자료구조 알고리즘_수요일

유진·2022년 11월 9일
0

TIL Today I Learned

목록 보기
8/116
post-thumbnail

2022.11.09.(수)

TIL Today I Learned


Good: 강의를 듣고 스스로 생각을 해보려고 한 점이다.

Bad: 알고리즘 실시간 강의에 집중하지 못한 점이다. 알고리즘 강의가 어려워서 스트레스받는 점.

▶ 유튜브나 드라마 볼 때 옆으로 넘겨보는 스타일이다. 핵심만 알고 싶기 때문이다. 영화를 볼 때 엔딩을 먼저 본다. 결말을 알면 과정이 이해가 잘 되기 때문이다. 알고리즘 실시간 강의를 들었다. 열심히 해주신 강사님께 감사하지만, 집중이 잘 되지 않았다. 그 이유는 알고리즘 웹 강의를 오후부터 보는 날이다. 아무것도 모른 상태에서 실시간 강의를 먼저 듣는 게 버거웠다. 또 핵심만 보고 싶은 성격에 늘어지는 강의에 잘 참여를 못하게 되었다. 웹 강의를 우선 듣고 실시간 강의 녹화본을 보려고 계획 중이다.

▶ 파이썬 문법 기초를 마무리하고 자료구조 알고리즘 강의를 시청하고 있다. 파이썬 문법과 프로그래밍하는 것이 비슷하여 재미있다. 새로운 정보를 얻을 수 있어 집중하면서 본다. 처음부터 잘할 수 없다. 이번 강의도 빠르게 보기 -> 다시 보기 -> 스스로 숙제하기이다.

▶ 1-10강 듣다가 공감된 부분이 있다. '문제를 풀 때 어떤 조건을 찾고 있는지 생각해라.'이다. 문제를 보면 "이건 max로 했던 거 쓰면 되겠다. 저건 count += 1로 쓰면 되겠다."라고 바로 생각이 난다. 많이 풀고 이용한 거는 생각이 난다. 이처럼 어려운 것도 기출문제처럼 많이 풀어보면 실력이 늘지 않을까 생각된다.


[파이썬 문법 기초]

* 2-2강 튜플, 집합 퀴즈

✍️ Q. A가 들은 수업 중, B가 듣지 않은 수업을 찾아보기(차집합 A-B)

▶ 틀린 코드)

student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
a_set = set(student_a)
b_Set = set(student_b)
print(student_a - student_b)
내용을 입력하세요.

▶ 옳은 코드)

student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
a_set = set(student_a)
b_Set = set(student_b)
print(a_set - b_Set)
  • 마지막 프린트 값이 잘못되었다. 정답은 print(a_set- b_Set)

[자료구조 알고리즘]

* 1-4강 알고리즘과 친해지기(1) 퀴즈

✍️ Q. 다음과 같이 숫자로 이루어진 배열이 있을 때, 이 배열 내에서 가장 큰 수를 반환하시오. (최댓값 찾기)

▶ 틀린 코드)

num = [3, 5, 6, 1, 2, 4]
max = 0
max < num
max = num
print(max)

▶ 옳은 코드)

A.

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]))

B.

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]))
  • 11/8 화요일에 max로 계산한 기억이 있어서 해보았다.

  • A 와 B 둘 다 정답이다. 각자 맞는 스타일이 있다. 나는 처음에 B로 배워서 더 마음이 간다.


* 1-5강 알고리즘과 친해지기(2) 퀴즈

✍️ Q. 다음과 같은 문자열을 입력받았을 때, 어떤 알파벳이 가장 많이 포함되어 있는지 반환하시오. (최빈값 찾기)

▶ 옳은 코드)

A.

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

B.

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

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"))
  • count += 1 비슷하게 들어갈 줄 알았다. A. 에서 occurrence += 1을 사용했다.

  • A 코드가 나에게 맞는 거 같다. A 위주로 공부를 해도 되는 것일까? B를 사용하게 되면 그때 가서 배우면 되는 것일까?


* 1-8강 점근 표기법 퀴즈

✍️ Q. 배열에서 특정 요소 찾기

▶ 옳은 코드)

def is_number_exist(number, array):
    for element in array:
        if number == element:
            return True
    return False


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

    for element in array:     # array 의 길이만큼 아래 연산이 실행
        if number == element: # 비교 연산 1번 실행 
            return True
    return False

* 1-9강 알고리즘과 더 풀어보기(1) 퀴즈

✍️ Q. 곱하기 or 더하기

▶ 옳은 코드)

def find_max_plus_or_multiply(array):
    multiply_sum = 0
    for number in array:
        if number <= 1 or multiply_sum <= 1:
            multiply_sum += number
        else:
            multiply_sum *= number
    return multiply_sum


result = find_max_plus_or_multiply
print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4]))
print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4]))
print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))

  • 1-10강 알고리즘과 더 풀어보기(2) 퀴즈

✍️ Q. 반복되지 않는 문자
▶ 옳은 코드)

def find_not_repeating_first_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:
            not_repeating_character_array.append(chr(index + ord("a")))

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

    return "_"


result = find_not_repeating_first_character
print("정답 = d 현재 풀이 값 =", result("abadabac"))
print("정답 = c 현재 풀이 값 =", result("aabbcddd"))
print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa"))

* 1-11강 1주차 끝 & 숙제

✍️ Q. 소수 나열하기
▶ 옳은 코드)

✍️ Q. 문자열 뒤집기

▶ 옳은 코드)


[ 2주차 계획 ]

- 스파르타코딩클럽 계획

✔ 월: javascript 올인원

✔ 화: 파이썬 문법 기초

✔ 수: 파이썬 문법 기초/ 자료구조 알고리즘

□ 목: 자료구조 알고리즘

□ 금: 자료구조 알고리즘

- 나의 계획

✔ 파이썬 문법 나머지 기초 완강하기

✔ 자료구조 알고리즘 1주차 듣기

✔ 오답노트 다시 보기

profile
긍정 🍋🌻

0개의 댓글