스파르타코딩클럽/항해99

항해 20일차 TIL

YONS 2022. 1. 29. 07:26

1. 20일????

벌써 20일이라고??? 1/5를 왔다고...?

 

 

 

2. 수면사이클 2일차

일단 트루다크는 효과가 있었지만 내가 기대했던 만큼의 효과는 아니었다. 나는 11시반까지 공부하다가 컴 끄면 바로 누워서 숙면에 빠져들고 6시에 칼같이 기상하길 바랬는데, 체감상 12시~12시반까지 선잠을 잤던 것 같다. 그래도 효과가 아주 없는건 아닌게, 전에는 새벽 2시가 되어도 잠들지 못하고 계속 뒤척였는데 어제는 가만히 누워서 얕은 잠 자는걸 느끼다 잠들었다. 음. 아무리 트루다크를 쓴다고 해도 컴퓨터 끄자마자 잠드는건 좀 무리였나보다. 역시 못해도 30분정도는 컴퓨터 끄고 릴렉스를 한 다음 자야겠다.

그래서 오늘도 기록.

 

어제 00시 반 잠든것으로 추정(시간 확인 못함), 오늘 7시 기상.

19시부터 Daylight 착용.

22시 30분부터 Twilight 착용.

 

 

 

3. 공부 상황 돌아보기

내가 왜 연결리스트에 계속 약한건지 생각해봤는데... 나는 연결리스트가 어떤 상황에서 왜 쓰이게 되는건지 모르니까, 뭔가 쓸모를 못 느껴서 나도 모르게 무의식적으로 배우기를 거부하는 것 같다. 연결리스트를 써야 풀리는 문제를 보면 좀 더 제대로 잘 배울 수 있을 것 같은데...

 

근데 조금 더 잘 생각해봤더니, 아무래도 나는 번아웃이 계속 유지되고 있었던 것 같다. 사실 따져보면 재귀도 그렇게 어려운건 아닌데, 분명히 이해는 했는데 내껄로 만들지 못하고 있을 뿐이다. 그럼 왜 내껄로 못 만들고 있는지를 생각해봤는데... 분명히 알고리즘 주차 처음엔 클래스도 제대로 이해 못하니까 막 스스로 찾아보면서 몇번이나 정리하고 내껄로 만들었단 말이지. 하지만 그 클래스를 내껄로 만드는 사이 이미 다른 사람들은 진도를 나갔다. 나는 진도를 쫓아가려다 투포인터 기법이 반복적으로 나오는데 이걸 못하니까 또 투포인터를 내껄로 만들려고 했고. 그사이 다른 사람들은 또 진도 나가고.

저런 상황들이 반복되니 그냥... 더이상은 뭔가를 배우기 싫어졌던 것 같다. 말로는 나만의 길을 간다고 하면서도 계속해서 진도는 신경쓰였고, 그렇게 내 길도 못가고 진도도 못 따라가고 그냥 말 그대로 갈팡질팡만 하고 있었던 것 같다.

 

오늘부터는 무조건 하루에 개념 하나씩 확실히 내껄로 만드는걸로 해야겠다.

 

 

 

4. 그래서 한 개념공부

 

1) 구현에 따른 자료구조 종류

(1) 배열 Array. 파이썬에선 List. 가장 일반적인 구조다. 메모리 상에 같은 타입의 자료가 연속적으로 저장된다.

(2) 튜플 Tuple. 둘 이상의 자료형을 묶음으로 다루는 구조다.

(3) 연결리스트 Linked List. 노드를 단위로 하고, 노드는 자료와 다음 노드를 가리키는 참조값으로 구성되어 있다. 다음만을 가리키는 한쪽 방향으로만 연결되면 단방향 Singly Linked, 이전과 다음 양방향을 가리키면 이중연결리스트 Doubly Linked라고 한다.

(4) 원형 연결 리스트 Circular Linked List. 마지막 노드가 처음 노드를 가리키는 연결리스트다. 원형(또는 환형) 리스트도 단방향 양방향이 있다.

(5) 해시 테이블 Hash Table. 개체가 해시값에 따라 인덱싱 된다. 현실적으로 가장 많이 쓰이고 있기 때문에, 해시함수와 해시충돌 해결방법 꼭 알아두기.

 

형태에 따른 자료구조와 순차적 자료구조, 스택도 오늘 개념 배우긴 했는데... 내용 정리하기엔 벌써 시간이 늦었다. 컨디션 관리를 위해 오늘은 이만 자고 내일 해야지.

 

 

 

5. 오늘의 수업

오늘 알고리즘 본 수업에서는 버블정렬, 선택정렬, 삽입정렬을 배웠는데, 내가 오늘 저 3가지를 다 소화할 수는 없을 것 같았다. 그래서 일반적으로 더 효과적인 방식인 삽입정렬을 외우기로 했다.

더보기

1) 삽입정렬 기본 코드

def insertionsort(lst):
    for i in range(1, len(lst)):
        for j in range(1, i+1):
            place = i - j
            if lst[place] > lst[place+1]:
                lst[place], lst[place+1] = lst[place+1], lst[place]
            else:
                break
    print (lst)

insertionsort([4, 2, 1, 3])

 

2) 저 코드를 토대로 풀어본 리트코드 가장 큰 수 (https://leetcode.com/problems/largest-number/)

def sort(lst):
    for i in range(1, len(lst)):
        for j in range(1, i+1):
            index = i - j
            if str(lst[index+1])+str(lst[index]) > str(lst[index])+str(lst[index+1]):
                lst[index], lst[index+1] = lst[index+1], lst[index]
            else:
                break

    print (''.join(lst))
    
numslist = ['3', '30', '34', '5', '9']
sort(numslist)

 

아직 혼자서 뭔가를 새롭게 생각해 내서 구현하는건 힘들지만, 이렇게 기본적인 코드를 외운 다음 그걸 따라 치고, 상황에 맞게 적절하게 수정하는건 할 수 있다. 얼른 개념을 공부해야 나 혼자서도 새로운 코드를 구현할 수 있을 것 같다.

 

 

 

6. 그 외 자잘한 생각들

오늘 얻은 팁 - 연결리스트 공부할 때 그림으로 그려보면 이해하는데 도움이 된다!

 

아 그리고. 사람들과 이야기가 길어질수록 나 혼자 뭔가 초조해져서 자꾸만 자리를 이탈하게 되는데. 문득 내가 사람들을 피하는 것 처럼 보일까봐 조금 걱정이다. 음... 조만간 잘 이야기 해야겠다. 오해가 생기지 않도록...

 

오늘은 그래도 성과가 제법 있었다. 역시 의지의 문제였나보다. 나는 그동안 너무 게을렀다...

 

팀원분들은 정말 공부를 좋아하는 분들이셨다. 나한테는 정말 다행이다. 공부에 집중할 수 있겠다!

아 그리고. 팀원님 한분 덕분에 뭔가 더 욕심이 생겼다. 람다 함수를 쓰니까 진짜 있어보이는구나... 나도 람다 꼭 좀 잘 쓰고 싶다.

조용한 분위기는 아직도 좀 숨막히지만 난 이팀 마음에 든다 ㅎㅎㅎㅎ 좋다!!