스파르타코딩클럽 내일배움캠프 8일차
오늘의 하루 정리
오전) 파이썬 강의 완강
오후) 알고리즘 특강 + 코드업 파이썬 100문제 중 10문제 풀기
파이썬 강의 정리
튜플, 집합
- 튜플 (Tuple)
- 리스트와 비슷하지만 불편인 자료형 (순서 존재)
- 딕셔너리 대신 리스트와 튜플로 비슷하게 만들어야 할 때 많이 쓰인다
- 집합 (set)
- 중복이 제거된다
- 교집합 / 합집합 / 차집합
- 예제
# A가 들은 수업 중, B가 듣지 않은 수업 찾아보기
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
set_a = set(student_a)
set_b = set(student_b)
print(set_a - set_b)
f-string
- 중괄호({})를 사용하면 f-string 안에 파이썬의 표현식을 삽입할 수 있다.
- 문자열 안에 변수 값을 삽입하는 용도로 자주 사용된다
scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]
for s in scores:
name = s['name']
score = str(s['score'])
print(f'{name}은 {score}점입니다')
예외처리
- try - except 문
- 에러가 있어도 건너뛰게 할 수 있는 방법
- 실제 프로젝트에서 사용시 어디서 에러가 났는지 알 수 없으므로 비추
# 20세보다 큰 사람만 출력
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby'},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
#for person in people:
# if person['age'] > 20:
# print (person['name']) # 에러 발생
for person in people:
try:
if person['age'] > 20:
print (person['name'])
except:
name = person['name']
print(f'{name} - 에러입니다')
파일 불러오기
- from [파일명] import *
# main_test.py
from main_func import *
say_hi()
# main_func.py
def say_hi():
print("안녕!")
한줄의 마법
- if문 - 삼항연산자
- (참일 때 값) if (조건) else (거짓일때 값)
num = 3 result = "짝수" if num % 2 == 0 else "홀수" print(f"{num}은 {result}입니다")
- for문
- for in
a_list = [1, 3, 2, 5, 1, 2] b_list = [a*2 for a in a_list] print(b_list)
map, filter, lambda식
- map (변환 함수, 순회 가능한 데이터)
- 두번째 인자로 넘어온 데이터가 담고 있는 모든 데이터에 변환 함수를 적용하여 다른 형태의 데이터를 반환
- 여러 개의 데이터를 한 번에 다른 형태로 변환하기 위해서 사용된다
- 예제
people = [ {'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}, {'name': 'john', 'age': 7}, {'name': 'smith', 'age': 17}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25} ] def check_adult(person): return '성인' if person ['age'] > 20 else '청소년' result = map(check_adult, people) print(list(result)) # 람다식 result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people) print(list(result)
- filter (함수, 리스트/튜플)
- 리스트의 원소 중 특별한 것만 뽑기
- lambda식
- lambda 인자: 표현식
클래스
(예) 아주 많은 몬스터들의 HP를 관리하는 방법
방법 1. 리스트의 순서를 지켜서 각 몬스터들의 HP를 적어둔다
방법 2. 몬스터마다 각자의 HP를 가질 수 있게 한다
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack
if self.hp < 0:
self.alive = False
def status_check(self):
if self.alive:
print('살아있다')
else:
print('죽었다')
m = Monster()
m.damage(120)
m2 = Monster()
m2.damage(90)
m.status_check() # 죽었다
m2.status_check() # 살아있다
알고리즘 특강
우리가 들어야 하는 강의 중에 자료구조&알고리즘 강의가 있다.
어제 초반에 조금 듣다가 아무래도 파이썬 문법 강의를 먼저 듣고 들어야겠다는 생각이 들어서 멈추었는데,
마침 특강을 하신다고 해서 바로 직전에 1-5까지 듣고 특강에 참여했다.
사실 시간복잡도가 본격적으로 나오기 전에 멈췄는데,
아무래도 알고리즘 강의다보니 문법만 안다고 되는 것도 아니고 공부를 더 해야겠다는 생각이 들어서였다.
고민해보고 문제 풀려고 해도 시간이 꽤나 걸리기도 하고 해설을 보는데도 이해하는데 오래 걸려서
특강이 필요했었는데, 참 다행이다.
특강은 너무너무 좋았다. 천천히 우리가 이해하기 쉽게 알려주시려고 해서 시간은 좀 오바되었지만,
그 시간만큼 좋은 강의였다. 마치 나혼자 하면 빙 돌아갈 길을 알기 쉽게 설명해주는 느낌.
내일도 있다고 하던데 그전에 오전에 미리 강의를 듣고 혼자 예습(?)을 해야겠다.
특강 내내 알려주신 내용은 많은데 내가 그 문제를 온전히 이해하고 넘어가려면 아직 시간이 좀 필요한 것 같아서,
TIL에 적지 않고 내일 다시 복습하고 넘어가려고 한다. 아직은...알고리즘이 너무 어렵다...ㅋㅋ
대신에 코드업 기초 100제라는 사이트를 발견해서 일단 10문제를 풀어보았다. 사실 너무 극 초반이라
입출력하는 문제밖에 없어서 10문제라고 해도 쉽게 넘어갔는데, 문제를 더 풀수록 어려워지는 구조 같다.
내일도 풀어봐야지.
특강에서 해설했던 문제 대신에,
튜터님이 말씀하신 내용 받아적은 걸 TIL에 대신 적어야겠다.
너무 막 적어서 두서없긴 하지만...ㅎㅎ
익스큐전 타임 = 알고리즘 실행시간
코테에서 내가 짠 코드가 하나하나의 프로세스가 모두 통과가 되어야 최종적으로 문제 solve한 것이다
테스트 케이스에 대한 데이터 set이 모두 통과되어야 성공 성능평가 테스트 케이스도 있다.
몇 만건의 데이터를 넣어서 성능테스트도 한다.
짧은 코드 = 오타 등 잔실수가 적어진다. 오류가 줄어든다. 직관적이다
작성 시간을 단축해야 한다.
컴퓨터가 코드를 읽는 속도가 빠르다
코테볼 때 제한시간이 짧다 = 코드가 짧은 것이 좋다 (숏코딩이 중요!)
프로그래밍 = 문제를 해결하는 것 쉽고 빠르고 간결하게 해결하는 것 => 알고리즘을 잘 활용하면 이럴 확률이 더 높다
자기객관화 필요
필요하다면 공부를 더 하면 된다
자기객관화를 위한 기준
=> 마음의 소리가 가장 중요하다 (잘하면 알아서 자신감이 폭발하기 때문)
=> 혹은 객관적인 테스트를 통해 내 수준을 알면 된다 ===========================================================================
최솟값 찾기
list comprehention 구글링해보기 (python list comprehension)
파이썬은 들여쓰기가 가장 중요하다
어설프게 아는 것 금지, 꼼꼼하게 다 살펴봐야 한다
라이브러리를 아는 것도 중요하지만 기본 테크닉이 가장 중요하다
파이썬은 for문, if문을 확실히 쓸 줄 알아야 한다.
최빈값 찾기
list = [0, 0, 0... 0 ] 0이 26개인 자료구조 : 비트맵 자료구조 (ex. a가 3개면 0번째 인덱스의 값은 3이됨)
비트맵 자료구조 >> 구글링해보기
자주 쓰는 거는 구글링하지 말고 그냥 외우는 게 좋다
구글링이 항상 좋은 건 아니다
자주 쓰는 라이브러리 역시 암기
아스키를 안써도 되지만 아스키 코드를 쓰는 것이 편하다 = 다른 방법도 존재한다
이렇게 보면 너무 두서없고 무슨 말을 썼는지 보는 사람은 모르겠지만 나는 아니까...ㅋㅋㅋ
문제 관련해서 적은 건 따로 두고 튜터님이 말씀하신 내용이나 간단히 적어보았다.
확실히 알고리즘을 알면 문제 푸는 속도가 주는 거니까. 열심히 공부해야지...!!
짧은 일기
본격적으로 심화된(?) 내용을 배우려니까 영 쉽지 않다.
그동안 내가 배운 건 기초 중의 기초였는지...아니면 알고리즘이 어려운건지.
다행히 나만 어려운 건 아니니까...ㅋㅋ 남들 다 어려우니 좀 위안이 되었다.
내일도 알고리즘 강의 들으며 필요하면 공부 더 하고 하면서 보내야겠다.
어제 12시간이 짧다고 적었던 것 같은데 오늘도 그런 생각이 든다. 물론! 그렇다고 쉬운 건 아니다.
그렇지만, 공부할 게 많고 내가 부족하다는 객관적인 평가를 내리고 나니 그렇다는 말이다.
열심히 해야지...4개월동안 몰입하겠다고 했으니 그래야한다는 다짐을 오늘도 한다ㅋㅋ
내일의 나도 화이팅...ㅎ