[TIL] 내일배움캠프 React 과정 2022.11.10

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와 생성자 부분) 다음 문서의 도움을 많이 받았다!

https://wikidocs.net/28

 

self 이해하기-출처 https://wikidocs.net/

 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번이나 있어서 그런가 강의 진도도 많이 못 나갔다. 강의마다 이해 안 되는 부분 있으면 자꾸 구글에서 자료 찾아보고 그러느라 강의 듣는데 걸리는 시간이 더욱 길어졌다. 다음 주까지 이 고통의 시간이 계속되는 걸까..? 차라리 빨리 팀 프로젝트가 시작됐으면 하는 마음도 있다. 살려줘🤢🤮