본문 바로가기

TIL

22.11.10_TIL_내배캠

알고리즘 실강

자료구조 선택 고려사항 4가지
삽입시각, 삭제시간, 검색시간, 정렬여부

 

double linked list 

linked list 설명해주시다가 양방향도 있다고 알려주셨다. 

앞뒤로 통신이 가능하지만 코드가 더 복잡해진다고, 웬만해선 안 쓰길 추천 하신것 같다?...

알고리즘 강의 들으면서 내용 참고해야지.

 

linked list 

list와 비슷하지만 기차칸처럼 연결을 끊고 이어붙이고 할수 있다. 정도만 이해했다.  

 

공부법

하나씩 파고드는게 맞으나, 지금은 아는게 없어서 해결방법을 그리지 못하니까 알고리즘의 목적에 따라 비슷한 개념들끼리 그룹화하여 공부. 

지금은 코딩에 익숙하지 않아 인지부하가 일어나니, 한국말로 생각을 정리 후 짜는 연습을 해라. 


파이썬 return

알고리즘 실시강 강의 중, 튜터님께서 쉽다고 배열 내에 특정 숫자가 있는지 찾아보기 (코드 작성) 를 내주셨는데, 처음엔 for문 구조자체가 기억 안 나서 못적고, 그후 강의 끝나고 난뒤 천천히 작성해보았으나 else쪽에 return 을 넣어서 계속 출력이 안됬었음.. 

 함수 실행 후 결과값을 retrun하면 값이 휘발 된다고 말을 듣긴 했으나, 그게 반환되면 거기서 동작이 멈추는지 몰라서 한참 고민하였다.  튜터님이 다른분 문제해결해주는걸 기다리다.. 혹시 듣다보면 관련 내용이 나오지 않을까 싶어서 따라 갔었는데, retrun을 하면 값이 휘발 된다고 강조하시는 걸 듣고, 아!? 하며 이해 함..  이제 return은 안 다~~ 

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

def aa(y, target):
    for x in target:
        if y == x:
            return True
    return False
result = aa(5,arr)
print(result)

#처음 짰던 것.
def aa(y, target):
    for x in target:
        if y == x:
            return True
        else:
            return False
result = aa(5,arr)
print(result)


# def aa(y, target):
#     for x in target:
#         if not x==y:
#             continue
#
#         else:
#             return True
#     return False
#
# print(aa(5,arr))
# print(aa(6,arr))

코드스코프

모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라 한다. 즉, 스코프는 식별자가 유효한 범위를 말한다.

https://velog.io/@zeebeck/Scope%EB%9E%80

지역변수, 전역변수


코드블록

프로그램 코드에서 블록이란 마치 한 문단처럼 보이는, 코드의 한 부분을 뜻하며, 중괄호로 묶여 있는 경우가 많다. 보통 1개 이상의 명령어를 가지고 있으나, 주석으로 이루어진 블록이나, 아무 내용도 없는 빈 블록도 가능하다. 위키백과


인자값

 매개변수와 인자의 차이점은 쓰임의 차이에 있습니다. 함수를 정의할 때 사용되는 변수를 매개변수, 실제로 함수가 호출될 때 넘기는 변수값을 인자라고 설명할 수 있습니다.  ( https://7942yongdae.tistory.com/155  )

def cal2(a, b=3):  #a, b :매개변수(parameter)
    return a + 2 * b

print(cal2(4)) #4가 인자값(Argument)

#16강 map, filter, lambda식

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):
    # if person['age']>20:
    #     return '성인'
    # else:
    #     return '청소년'

    return '성인' if person['age']>20 else '청소년' #if문 한줄쓰기

result = map(check_adult, people) #people을 하나하나 돌면서 check_adult에 넣어라.
print(list(result)) #위 결과값을 list를 묶어라.


result = map(lambda person:'성인' if person['age']>20 else '청소년', people)
#people을 하나씩 돌면서 person에 넣을껀데 그 person을 가지고 아래에 리턴을 해라.
print(list(result))
#한줄짜리 함수를 굳이 함수까지 만드냐


result = filter(lambda x:x['age']>20, people)
print(list(result))
#lambda식을 쓸때는 x로 표기를 해줌 관용적으로.
#filter은 map과 비슷하지만, true 값만 뽑아줌.
#17강 함수심화

def cal2(a, b=3):
    return a + 2 * b

print(cal2(4)) #10, b값이 지정되어있어서 안 넣어도 됨.
print(cal2(4, 2)) #8, b값을 지정해줘도 됨
print(cal2(a=6)) #12, a값만 지정해줘도 됨
print(cal2(b=7, a=1)) #15, 매개변수에 순서 상관 없이 넣을수 있음



def call_names(*args): #입력갯수 미지정
    for name in args:
        print(f'{name}야 밥먹어라~')

call_names('철수','영수','희재') #3개를 넣으면 다 반영
# 철수야 밥먹어라~
# 영수야 밥먹어라~
# 희재야 밥먹어라~


def get_kwargs(**kwargs):
    print(kwargs)

get_kwargs(name='bob')
get_kwargs(name='john', age='27')
# {'name': 'bob'}
# {'name': 'john', 'age': '27'}
# 이건 무슨 소린지 모르겠다. 그냥 딕셔너리로 만들어준다는데 이걸 어따쓰지??
# 직접 쓸일은 없고 라이브러리 파고 들어 갈 때 볼꺼라는데.. 어디 쓸지 감이 안온다?..
#class 설명. 18강

class Monster(): #Monster이라는 클래스를 만들어줌.
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack  # self. <- 각자의, 내 hp.
        if self.hp < 0: #피가 0이되면
            self.alive = False #몬스터가 죽어야지.. 암..

    def status_check(self):
        if self.alive:  #if self.alive == true 이건 기본값이란다.
            print('살아있다')
        else:
            print('죽었다')

m1 = Monster()  #m1이라는 것을 인스턴스다. 인스턴스란.. 클래스를 복제한 것
m1.damage(120)
m1.status_check()

m2 = Monster()
m2.damage(90)
m2.status_check()

 

인스턴스란 클래스를 복제한것. ex)몬스터1, 몬스터2  1,2는 서로 달라 각자의 값을 가지고 있음.


오늘 한 일

1.파이썬 공부, 알고리즘 공부, 

2.정규시간 끝나고 튜터님들의 좋은 말씀 듣기.

 

느낀 점

1. 작은거긴 하지만, 같이 공부해서 문제를 해결하니 너무 좋았다.

알고리즘 수업듣고 튜터님이 간단하니 짜 보라한 특정숫자 찾는 코드를 못 짜서 매우 속상했다. 구현력이 없는 것 같아 하나하나 연습하자는 마음으로 늦게나마 짰으나, 위에처럼 return을 정확히 몰라서 헤맸다.  슬랙 스레드를 보면 비슷하게 짠사람이 많은데 나만 for문이 안도는 건가 싶어 처음에는 조운님(같은팀원)이 슬랙에 답변을 하셨어서, 찔러서 제대로 작동하냐고 여쭤봄. 하지만 같은 문제가 발생해 같이 머리싸메고 왜 그러지를 고민하는 과정도 재밌었고, 해결되고나서 힌트 드리는 과정도 재밌었다.  조용히 채팅으로 했었어서 뒤늦게 찬호님이 보시고 힌트도 주시고, 다음에는 도와드릴수 있을꺼 같으니 같이 하자고 말해주셔서 너무너무 좋았다.

 

2. 재밌게 웃으면서 하나, 둘 듣는 것도 큰 도움이 된다. 정규과정 끝나고 다 같이 이야기하면서 하나, 둘 듣는데 그 때 당시에는 정확하게 이해하지 못하지만, 다음에 또 그용어를 들으면 이어서 설명이 보충되고 해서 좋다.  말 주변이 없어서 그냥 슬그머니 들어가서 하하호호하는게 다라서 아쉽고,   좋은 말 많이 해주시는 튜터님들과 다른 튜티분들이 많아서 정말 감사하다.  나도 빨리 정보공유 하고 싶다.. ㅎㅎ .. 

 

'TIL' 카테고리의 다른 글

22.11.13_TIL  (0) 2022.11.13
22.11.11_TIL_내배캠  (0) 2022.11.11
22.11.09_TIL_내배캠  (1) 2022.11.09
22.11.08_TIL_내배캠  (0) 2022.11.08
22.11.07_TIL_내배캠  (0) 2022.11.08