728x90
반응형
오늘 한 일
- 자료구조 3주차 수강
- dunder methods 공부
- 거북이 스터디~~
- 밤에 개인공부 하려고 했는데 캠퍼 분들이랑 신나게 수다 떠느라 못했다. 그래도 재밌었으니 죠앙
느낀점
- 점점 더 어려워져서 모범 답안 보기 전 정답을 맞추는 게 사실상 불가능해졌는데, 막상 해설을 들으면 이해가 돼서 알고리즘 강의는 요약본으로 복습하기 보다는, 전체적으로 다시 읽어보고 예제를 직접 해보며 복습하는 게 좋을듯하다.
- behavior을 단순히 내가 아는대로 행동이라고 해석하면 안 되는 거야 응.. generator도 generate의 뜻이 어느정도 반영은 돼있겠지만 발전기나 만드는 사람으로 해석하면 안 되는 거고, 응 그러치이이 해석은 되는데 뭔 말인지 모르겠따아아 해석이 잘못된 건지 한국어로 읽었어도 이해가 안 되는 거였는지도 모르겠다
정렬
- 버블 정렬
- 마지막 자료와 직전 자료를 비교해 서로 교환하면서 자료를 정렬한다.
- 변수 스왑 : a, b = b, a라고 작성시 두 변수의 값이 바뀐다.
- 선택 정렬
- 버블 정렬하고 비슷한데, “최솟값”을 찾아 변경하는 게 차이점. (최솟값을 ‘선택’)
- 임의의 min_index라는 변수를 통해 인덱스를 비교하는데, min_index와 반복문을 통해 나온 최종 인덱스의 값을 스왑해주면 된다.
- 현재 데이터의 상태와 상관없이 항상 비교함으로써 위치를 바꾼다.
- 삽입 정렬
- 말 그대로 새로 들어온 원소가 정렬된 원소 사이로 들어가는 느낌
- 정렬된 배열과 아닌 배열로 나뉘는데, 맨 앞은 정렬된 상태로 본다.
- 병합 정렬 - merge
- 집합을 각각 정렬한 후 합치는 걸 반복하는 정렬
- 병합 정렬 - mergeSort
- 분할 정복 개념 도입 : 문제를 작은 2개의 문제로 분리하고 각각 해결한 다음, 결과를 모아 원래의 문제를 해결하는 것
- 재귀 함수를 활용하는데, 탈출 조건 잊지 말기!
- 파이썬에서는 배열을 쉽게 잘라 함수에 넘길 수 있기 때문에 함수의 인자로 배열을 받는다.
- 스택
- Last In First Out ⇒ LIFO
- 컴퓨터의 Ctrl + Z 같이 나중에 들어간 원소가 가장 먼저 나오는 정렬
- push(data) : 맨 앞에 데이터 넣기
- pop() : 맨 앞의 데이터 뽑기
- peek() : 맨 앞의 데이터 보기
- isEmpty(): 스택이 비었는지 안 비었는지 여부 반환해주기
- 데이터를 넣고 뽑는 걸 자주하는 형태기 때문에 링크드 리스트를 활용한다.
- 큐
- First In First Out ⇒ FIFO
- enqueue(data) : 맨 뒤에 데이터 추가하기
- dequeue() : 맨 앞의 데이터 뽑기
- peek() : 맨 앞의 데이터 보기
- isEmpty(): 스택이 비었는지 안 비었는지 여부 반환해주기
- 스택과 마찬가지 이유로 링크드 리스트를 활용한다.
해쉬 테이블
- 데이터의 검색과 저장이 아주 빠른 형태로, 키와 데이터를 저장함으로써 즉각적으로 데이터를 받아오고 업데이트할 때 사용한다.
- → 파이썬의 딕셔너리랑 같다! (딕셔너리는 사실 내부적으로 배열을 사용한다)
- 해쉬 함수 : 임의의 길이를 갖는 메시지를 입력하여 고정도니 길이의 해쉬값을 출력한다. ⇒ hash(object)
- 배열의 길이로 나눈 나머지 값을 이용해 배열에 넣는다.
- 인덱스 만들기 ⇒ hash(key) % len(self.items)
- 충돌 : 해쉬 값을 배열의 길이로 나눴을 때 같은 값이 나와 같은 어레이의 인덱스로 매핑되면서 데이터를 덮어쓰게 되는 경우
- 충돌 해결법 1 - Chaining : 각 인덱스마다 링크드 튜플이 존재해 해당 인덱스의 링크드 튜플의 값을 가져오는 구조
- 이외에도 개방 주솝버 등을 통해 충돌을 해결할 수 있다. (강의에서는 따로 구현 X)
- 시간은 빠르되 공간을 대신 사용하는 자료구조이다.
기타
- answer = [0] * len(heights)와 같은 형태로 [0,0,0,0]과 같은 리스트를 만들 수 있다.
- while heights : heights가 빈 상태가 아닐 때까지, 였는데 정확히는 heights가 None을 반환하지 않을 때 반복문을 돈다는 이야기인 듯
- del dict[key] 로 딕셔너리의 요소를 삭제할 수 있다.
스폐셜 메서드 [던더 메서드, 매직 메서드]
- Dunder methods let me emulate the behavior of built-in types. 그래서 만약 클래스가 비어있다면 클래스 바깥에서는(out of the box) 내장 함수의 기능을(the behavior) 지원하지 않는다.
- repr()은 객체를 다시 생성할 때 eval()을 실행한다.
- str()은 __str__ 메서드가 없을 때 __repr__ 메서드를 참조하지만, repr()은 오직 __repr__ 메서드만 참조한다.
- → If you wanted to implement just one of these to-string methods on a Python class, make sure it’s __repr__ 라는 문장을 봤는데 아마 이거 때문인 듯?
🐢🐢 거북이 스터디 🐢🐢
- 클래스에는 속성과 동작 두 가지가 있다. 메서드를 제외하면 다 속성이라고 봐도 무방하다.
- init 생성자는 객체를 생성할 때 무조건 한 번 실행된다.
- 클래스도 다른 파일에 넣어놓고 임포트해올 수 있다.
- 생성자 안에는 주로 매개변수로 들어오는 값과 그 값을 활용하는 애들을 정의해준다. 그 외에는 클래스변수로 정의해주는 게 더 깔끔쓰
밀린 걸 차근차근 처리하기 위해 내일 해야 할 일
- 쟝고 html 안 뜨는 거 튜터님한테 질문해서 해결하러 가기
- 자료구조와 알고리즘 강의 완강하기 (나중에 꼭 복습할 것)
- 스폐셜 메서드 공부 끝내기
- 시간이 남는다면 (안 남을 거 같지만) 실강 객체지향 부분 다시 듣기
반응형
'Programming > TIL and WIL' 카테고리의 다른 글
| 220922 Today I Learned (TIL) (1) | 2022.09.23 |
|---|---|
| 220921 Today I Learned (TIL) (0) | 2022.09.22 |
| 220919 Today I Learned (TIL) (1) | 2022.09.19 |
| WIL (0) | 2022.09.19 |
| 220917 Today I Learned (TIL) (0) | 2022.09.17 |