Today I Learned
- 알고리즘 온라인 강의 수강
- 튜터님 실시간 보충 강의 수강
알고리즘 강의 내용
어레이와 링크드 리스트
Array | LinkedList | |
정의 | 크기가 정해진 데이터의 공간 | 크기가 정해지지 않은 데이터의 공간 |
특정 원소 조회 | O(1) | O(N) |
중간에 삽입 삭제 | O(N) | O(1) |
데이터 추가 | 모든 공간이 다 찼다면 새로운 메모리 공간을 할당받아야 한다. | 모든 공간이 다 찼어도 맨 뒤의 노드만 동적으로 추가하면 된다. |
정리 | 데이터에 접근(조회)하는 경우가 빈번할 때 사용한다. | 데이터 삽입과 삭제가 빈번할 때 사용한다. |
링크드 리스트의 연결고리는 '포인터', 각 화물칸은 '노드'
자료구조 선택 시 참고사항:
1.삽입 시간 2.삭제 시간 3.검색 시간 4.정렬 요구
python class 이해하기
class Person:
pass # 여기서 pass 는 안에 아무런 내용이 없다는 의미입니다!
person_1 = Person()
person_2 = Person()
Person이라는 클래스 안에 person_1과 person_2라는 객체를 만들어 주는 과정.
강의만 듣고는 class에 대한 이해가 어려워서(특히 self와 생성자 부분) 다음 문서의 도움을 많이 받았다!
setdata 메서드의 첫 번째 매개변수 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달된다.
생성자(Constructor)란 객체가 생성될 때 자동으로 호출되는 메서드
파이썬은 __init__으로 고정
while문 이해하기
while cur.next is not None:
강의를 듣다가 위의 코드를 보고 일단 처음 보는 while에 어떤 기능이 있는지 검색을 해봤다. 그리고 두 가지 궁금증이 생겼다.
1. while문도 반복문이라는데 왜 for문을 쓰면 안 되는 거지? 둘이 어떤 차이점이 있는 거지?
2. 왜 cur.next가 'is not' None일 때까지로 설정했는지 이해가 되지 않았다. is None이 되어야 하는 거 아닌가?
for문과 while문의 차이점
for문은 array나 list 같이 반복하는 횟수가 명확하게 정해져 있을 때 사용한다.
while문은 몇 번을 실행해야 할지 모르는 상황에서 특정 조건에 도달할 때까지 반복하고 싶은 경우 사용한다.
그리고 while문은 기본적으로 다음과 같은 구조를 가지고 있다. 이렇게 해서 첫 번째 궁금증은 해결!
while: [조건문]
[수행부분]
두 번째 궁금증은 코드에 주석으로 메모해 놨다. 정리하자면 cur.next(다음 노드)가 None이 아닐 때까지,
그러니까 마지막 노드 전까지 모든 노드를 돌려보라(이동하라)는 의미로 이해했다.
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self, data):
self.head = Node(data)
def append(self, data):
if self.head is None:
self.head = Node(data)
return
cur = self.head
# head 노드부터 한 칸씩 이동해서 맨 뒤에 있는 노드까지 이동한다.
# next 노드에 None이 나온다면 한 칸씩 이동하는 작업은 중지됨.
while cur.next is not None:
cur = cur.next
# 맨 뒤의 노드에 왔다면(cur.next is None이라면) .next로 다음 노드에 데이터를 추가해준다.
cur.next = Node(data)
링크드 리스트 원소 출력, 찾기, 추가, 삭제
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self, value):
self.head = Node(value)
def append(self, value):
cur = self.head
while cur.next is not None:
cur = cur.next
cur.next = Node(value)
def print_all(self):
cur = self.head
while cur is not None:
print(cur.data)
cur = cur.next
def get_node(self, index):
node = self.head
count = 0
while count < index:
node = node.next
count += 1
return node
def add_node(self, index, value):
new_node = Node(value)
if index == 0:
new_node.next = self.head
self.head = new_node
return
node = self.get_node(index - 1)
next_node = node.next
node.next = new_node
new_node.next = next_node
def delete_node(self, index):
if index == 0:
self.head = self.head.next
return
node = self.get_node(index - 1)
node.next = node.next.next
React반 실시간 보충 강의 내용
웹서버=고양이..?🐱
클라이언트가 서버에 요청(request)하면 서버는 그것을 제공(response)해준다.
터미널 단축어
clear, ls, cd...
render = 응답값을 주다
route = 이리로 가세요
파라미터란? 아이디, 비번을 입력해서 로그인 버튼을 누른다고 했을 때 아이디, 비번이 담겨있는 요청값
클라이언트와 서버는 파라미터(매개변수)를 주고받는다.
GET 방식: 파라미터 노출O
POST 방식: 파라미터 노출X
GET 방식은 파라미터가 노출되기 때문에 대부분의 경우 POST 방식을 이용한다!
동기 방식: 요청 a,b,c를 차례대로 처리함
비동기 방식: 요청 a,b,c를 한 번에 처리함 (그래서 요청 처리되는 동안 skeleton ui 등 사용)
느낀 점
오늘은 하루 종일 링크드 리스트랑 싸웠다. 나도 알고리즘이랑 친해지고 싶은 마음은 넘치는데 알고리즘은 고통의 연속이다. 오늘 실시간 강의가 2번이나 있어서 그런가 강의 진도도 많이 못 나갔다. 강의마다 이해 안 되는 부분 있으면 자꾸 구글에서 자료 찾아보고 그러느라 강의 듣는데 걸리는 시간이 더욱 길어졌다. 다음 주까지 이 고통의 시간이 계속되는 걸까..? 차라리 빨리 팀 프로젝트가 시작됐으면 하는 마음도 있다. 살려줘🤢🤮