TIL 11/10

드립이 블로그·2022년 11월 10일
0

Linkedlist

Linkedlist에서는 element가 아닌 node 라고 표현을 한다.
node에는 두가지 정보를 필요로 한다.
첫번째로는 node 내부의 데이터가 필요하다.
두번째는 다음 칸이 무엇인지 가리켜주는 데이터가 필요하다.

Class Node
    def __init____(self, data):
        self.data = data
        self.next = None

위의 코드에서 2번줄의 data와 3번줄 = 이후의 data는 매개변수이다.
3번줄 self.data의 data는 클래스 내부에서 사용되는 저장되는 변수이다.
self.next의 다음에 아무것도 없다는 것을 가리키기 위해 None을 표시해준다.

Linkedlist에서 다음 node를 추가하기 위해

first_node = Node(1)
second_node = Node(2)
first_node.next = second_node

와 같은 식으로 표시한다.
이렇게 되면
[1] → [2] 이런식으로 node가 추가되고 연결이 된 것을 확인할 수 있다.
하지만 이 방식을 사용하면 node의 개수가 많아짐에 따라 처리가 곤란해 지게 된다.
이를 위해 append 메소드를 사용하게 된다.

Node()를 head로 설정하고
append 메소드로
self.head.next = Node()를 추가해준다.
node가 여러개 있을 때, 새로운 노드를 추가하려면 맨 마지막 node로 이동하여 새로운 node를 추가해준다.
이는 cur의 다음이 None이 아닐 경우 cur를 .next하여 node의 마지막으로 이동 시킨 후 cur의 다음이 None이 되면 cur.next = Node()를 넣어준다.

재귀함수

재귀함수는 반복 되는 부분이 있는 경우, 이 부분을 함수로 만들어 내 간단하게 코드를 만들어 내는데 도움을 준다.

정렬

정렬에는 많은 방법들이 있다.
버블 정렬, 선택 정렬, 삽입 정렬, 병합 정렬이 있다.

버블 정렬

버블 정렬은 앞과 뒤를 서로 비교하여 정렬하는 것을 말한다.
오름 차순을 기준으로 설명하면 앞의 수와 뒤의 수를 비교하여 더 큰 수를 맨 뒤로 밀어내는 방식이다.

선택 정렬

선택 정렬은 말 그대로 선택을 해서 정렬하는 방식이다.
정렬 하는 숫자와 자리를 서로 바꿔가며 정렬하게 된다.

삽입 정렬

삽입 정렬은 또 다른 배열에 하나 하나 삽입하여 배열을 한다.

병합 정렬

병합 정렬은 배열을 최소단위로 쪼갠 후, 다시 병합을 하며 순차적으로 배열을 하는 것이다. 계속 반으로 쪼갠 후, 오른쪽과 왼쪽을 비교하게 되므로 재귀 함수를 사용하는 형태가 된다.

사실 어제부터 계속 Linkedlist가 이해가 되지 않아 계속 반복해서 봤다.
어제는 정말 전혀 이해가 되지 않았지만, 오늘 하루 종일 보다보니 생각보다는 이해가 되는 부분이 많았다. 말로 설명하라고 하면 어렵지만, 보는 순간 아 그런 느낌이구나 하고 넘어갈 수 있을 정도까지는 된 것 같다.
알고리즘 공부 정말 어려운것 같다. 개념부터 이해가 안되는 부분들이 많다. 이해를 하고 넘어가자니 시간이 너무 오래걸리고, 이해를 안하고 넘어가자니 다음것을 봐도 더 모르겠다. 요즘따라 하루 24시간이 모자라다는 생각이 든다. 알고리즘 관련 공부 이해할 때까지만 누가 시간좀 빌려줬으면 좋겠다.

1개의 댓글

comment-user-thumbnail
2022년 11월 11일

오오오~ 열심히 공부하는 모습과 마인드에 칭찬을 드립니다!!! 계속 화이팅입니다!! 조금은 쉬면서 하는 것도 추천입니다!!

답글 달기