스파르타코딩클럽 내일배움캠프/TIL

스파르타코딩클럽 내일배움캠프 8일차

MOON달 2022. 11. 9. 20:55
728x90
반응형
오늘의 하루 정리

오전) 파이썬 강의 완강

오후) 알고리즘 특강 + 코드업 파이썬 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개월동안 몰입하겠다고 했으니 그래야한다는 다짐을 오늘도 한다ㅋㅋ

내일의 나도 화이팅...ㅎ

728x90