본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-11-09(8day)

by elicho91 2022. 11. 9.

Python 기초문법(2)


👉 튜플

- 리스트와 비슷하지만 불변인 자료형

- 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓰인다.

a_dict = [('bob','24'),('john','29'),('smith','30')]

 

 

👉 집합

- 중복 제거가 가능하고, 교집합/합집합/차집합 구할 수 있다.

a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

print(a & b)  # 교집합
print(a | b)  # 합집합

👉 f-string

- 변수로 더 직관적인 문자열을 만들 수 있다.

for s in scores:
    name = s['name']
    score = str(s['score'])
    print(f'{name}{score}점입니다')

👉 예외처리 (try - except)

- 에러가 있어도 건너뛰게 할 수 있는 방법 (남용x)

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'bobby'},		#bobby는 나이가 없어서 에러가 나지만,
    {'name': 'red', 'age': 32},
]

for person in people:
    try:
        if person['age'] > 20:
            print (person['name'])
    except:		#try except 구문을 이용하면 에러를 넘길 수 있다.
        name = person['name']
        print(f'{name} - 에러입니다')

👉 파일 불러오기

- 메서드를 만든 파일을 다른 파일에서 import하면 속성들 사용 가능

#main_test.py
from main_func import *

say_hi()
#------------------------------

#main_func.py
def say_hi():
	print('안녕!')

👉 if문 삼항연산자 (한 줄로 쓰기)

num = 3

if num%2 == 0:
    result = "짝수"
else:
    result = "홀수"

print(f"{num}{result}입니다.")

#-------------------------------------

num = 3

result = "짝수" if num%2 == 0 else "홀수"

print(f"{num}{result}입니다.")

 

 

👉 for문 한 줄로 쓰기

a_list  = [1, 3, 2, 5, 1, 2]

b_list = []
for a in a_list:
    b_list.append(a*2)

print(b_list)

#-------------------------------

a_list  = [1, 3, 2, 5, 1, 2]

b_list = [a*2 for a in a_list]

print(b_list)

 


알고리즘(Algorithm -1)


✍️ 최대값 찾기

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

Q1. 각 숫자마다 모든 다른 숫자와 비교해서 최대값인지 확인하는 방법. (다른 모든 값보다 크다면 반복문 중단)

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

 

Q2. 가장 큰 수를 저장할 변수를 만들고, 배열을 돌아가면서 그 변수와 비교해서 대입하는 방법.

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

 

 

✍️ 최빈값 찾기

"hello my name is eli"

Q1. 각 알파벳마다 문자열을 돌면서 몇 글자 나왔는지 확인.

       만약 그 숫자가 저장한 알파벳 빈도 수보다 크다면, 그 값을 저장하고 제일 큰 알파벳으로 저장

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

 

Q2. 각 알파벳의 빈도수를 alphabet_occurrence_list 라는 변수에 저장.

그리고 각 문자열을 돌면서 해당 문자가 알파벳인지 확인하고, 알파벳을 인덱스 화 시켜 각 알파벳의 빈도수를 업데이트

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

 

 

👉 시간 복잡도 판단하기

- 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계

- 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것

 

 

👉 공간 복잡도 판단하기

- 입력값과 문제를 해결하는 데 걸리는 공간과의 상관관계

- 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것

 

 

👉 점근 표기법

- 알고리즘의 성능을 수학적으로 효율성을 평가하는 방법

- 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것

 

 

✍️ 곱하기 or 더하기 

Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오. 단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.

[0, 3, 5, 6, 1, 2, 4]
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

 

✍️ 반복되지 않는 문자

Q. 다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오.

만약 그런 문자가 없다면 _ 를 반환하시오.

"abadabac" # 반복되지 않는 문자는 d, c 가 있지만 "첫번째" 문자니까 d를 반환해주면 됩니다!
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

🙋‍♂️ 소감 : 

확실히 자바보다는 파이썬이 직관적이라 배우기가 좀 더 수월한 거 같다.
오늘 알고리즘 강의를 들었는데, 중요한 줄 알면서도 당시에 진도 따라가기도 벅차
나중에 프젝 다 끝나고 해야지라는 생각으로 알고리즘 문제 사이트 가입만 하고 들여다보질 못했다.
알고리즘 첫날 강의인데도 버벅대는 걸 보니, 정말 꾸준히 조금씩이라도 해야겠다는 생각을 했다.
자주 쓰는 알고리즘은 아예 외워버리기!

😈 아는 내용이라고 그냥 넘어가는건 금물! 😈

'❤️‍🔥TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2022-11-11(10day)  (0) 2022.11.11
[TIL] 2022-11-10(9day)  (1) 2022.11.10
[TIL] 2022-11-08(7day)  (0) 2022.11.08
[TIL] 2022-11-07(6day)  (0) 2022.11.07
[TIL] 2022-11-04(5day)  (0) 2022.11.04

댓글