본문 바로가기

내일배움캠프 4기 스프링/내배캠 TIL📘

11. 09 파이썬 기초 강좌/ 알고리즘 강의/ 알고리즘 특강/ JAVA 정석 + 기초

728x90

1. 파이썬 기초 강좌 완강

튜플: 소괄호 사용, 불변성을 가진다, 순서를 가지므로 인덱싱 사용 가능하다(리스트와 마찬가지로)

집합(set)

set(리스트) = 집합 -> 중복이 제거된다.

교집합: 집1 & 집2

합집합: 집1 | 집2

차집합: 집1 - 집2

*집합계산은 필수로 set이후!

 

f-string:

(파이썬 3.6 이상) 문자열을 더 쉽게 formatting하기 위함 ->

문자열 포맷은 왜 필요할까?:특정 값을 특정 위치에 특정하기 위해

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

 

예외처리(try - except): 중간에 에러가 나도 멈추지 말고 계속 진행하기 위해

*하지만 이렇게 하면 어디서, 왜 에러가 나는지 바로 확인할 수가 없다

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:
    try:
        if person['age'] > 20:
            print (person['name'])
    except:
        name = person['name']
        print(f'{name} - 에러입니다')

파일 불러오기: from python_file.py import 함수(또는 *)

 

삼항연산자 : (참 값) if (조건) else (거짓 값)

*리스트 두 배 만들기 예제

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)

 

map: 리스트의 모든 요소를 조작

def check_adult(person):
    if person['age'] > 20 :
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people) #people의 모든 요소를 check_adult에 넣고 실행하라
print(list(result))

#삼항연산자
def check_adult(person):
	return '성인' if person['age'] > 20 else '청소년'
    
result = map(check_adult, people)
print(list(result))

#람다식
result = map(lambda person : ('성인' if x['age'] > 20 else '청소년'), people)

filter: map에서 True값만 추출 -> 참,거짓일 때 return 값을 지정할 필요 없음)

result = filter(lambda person: person['age'] > 20, people)
print(list(result))

 

함수의 매개변수:

입력 값을 통해 함수에 값을 할당할 수 있다.

또한 어떤 매개변수에 어떤 값을 할당할 지 정한다면, 그 입력 값의 순서는 상관이 없다.

def cal(a, b):
    return a + 2 * b

print(cal(3, 5))
print(cal(5, 3))
print(cal(a=3, b=5))
print(cal(b=5, a=3))

#디폴트 값을 지정할 수 있다.
def cal2(a, b=3):
    return a + 2 * b

print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))

#입력 값의 개수를 정하지 않고 모두 받기
def call_names(*args):
    for name in args:
        print(f'{name}야 밥먹어라~')

call_names('철수','영수','희재')

#다수의 key:value 입력값를 딕셔너리로 출력
def get_kwargs(**kwargs):
    print(kwargs)

get_kwargs(name='bob')
get_kwargs(name='john', age='27')

 클래스

객체 지향적이다 = 지방자치제 ~ 각 객체에 각 속성을 부여하고 컨트롤할 수 있는 함수를 붙여두고, 중앙처리장치에서는 해당 함수만 실행하는 것.

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

2. 알고리즘 강의

점근 표기법:

빅오 표기법(BIG O), O(N)의 시간복잡도: 가장 오래걸릴 경우 ~ 일반적으로 사용된다

빅 오메가 표기법(BIG Omega), Ω(1)의 시간 복잡도: 가장 최선의 경우

 

1. 입력값에 비례해서 얼마나 늘어날지 파악해보자. 1 ? N ? N^2 ?

2. 공간복잡도 보다는 시간 복잡도를 더 줄이기 위해 고민하자.

3. 최악의 경우에 시간이 얼마나 소요될지(빅오 표기법)에 대해 고민하자

(펌: 강의자료)

 

1차 반복문 = O(N)

페이스북 기출문제:

곱하기 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. 바로 코드를 작성하지 않고, 문제의 다른 예시를 떠올리며 패턴을 찾는다

2. 배웠던 자료구조(요리재료)를 어떻게 활용할지 고민한다

3. 문제의 특징을 글로 써본다(인지부조화를 줄이는 노력을 한다)

3. 알고리즘 특강: 강창민 튜터님

코딩테스트에 대한 정보:

제한시간이 짧기 때문에 생각과 코드는 짧을 수록 좋다.. 그래서 파이썬!

파이썬의 장점: List comprehension

자료구조는 재료, 알고리즘은 레시피.

강의의 최댓값 찾기 방식: 선형탐색 알고리즘

비트맵 자료구조:

 

문제해결에서 가장 중요한 것: 논리적으로 생각하고, 인지부조화가 일어나지 않도록 정리하기

4. JAVA 정석 + 기초

접근제어자의 종류

Public, Default, Protected, Private

Private 같은 클래스 내

Protected 같은 패키지 내 또는 다른 패키지의 자손 클래스에서

Default 같은 패키지 내

 

캡슐화

캡슐화와 접근제어자

다형성(이해에 있어 제일 관건)

 

자바 기초 강의 : 객체지향언어

Java 코드 컨벤션 : 동사로 시작하는 메소드/ 카멜 케이스

클래스와 인스턴스

메소드 : 만약 메소드가 없다면?

생성자 : 인스턴스 초기화 메서드, 대표적으로 인스턴스 변수를 초기화할때 사용된다.

 

 

 

 

 

728x90