[TIL] 링크드 리스트와 Week5 리팩토링

샤이니·2023년 4월 23일
0

learned.log

목록 보기
32/46

오늘의 나는 무엇을 새롭게 배웠나요?

[1] 링크드 리스트(Linked List)

싱글리 링크드 리스트

  • 데이터를 순서대로 저장해준다.
  • 요소를 계속 추가할 수 있다.
  • 메모리에 연속적으로 저장되어 있는 것이 아니다.
    • 노드의 next 속성에 다음 노드에 대한 레퍼런스가 있다.
    • 따라서 특정 노드에서 앞에 있는 노드들에 접근할 수 없다.
  • 시간 복잡도
    • 접근 - O(n)
    • 탐색 - O(n)
    • 삽입 - O(1)
      • 원하는 노드에 접근 또는 탐색 + 삽입 O(n+1)
      • 가장 앞에 접근 + 삽입 O(1+1)
      • 가장 뒤에 접근 + 삽입 O(1+1)
    • 삭제 - O(1)
      • 원하는 노드에 접근 또는 탐색 + 삭제: O(n+1)
      • 가장 앞에 접근 + 삭제 : O(1+1)
      • 가장 뒤에 접근 + 삭제 = 뒤에서 두번째 노드(tail 전 노드)에 접근 + 삭제 : O(n+1)

더블리 링크드 리스트

  • 앞 노드와 뒤 노드에 대한 레퍼런스를 둘다 가지고 있다.
  • 접근 연산, 탐색 연산, __str__은 싱글리 링크드 리스트와 동일하다
  • 어떤 노드던지 링크드 리스트 안 모든 노드에 접근할 수 있다.
  • 공간 복잡도에서 싱글리보다 2배정도 차이가 난다. 즉, 추가적인 공간(레퍼런스가 있는 공간)이 O(n)만큼 더 필요하다.
  • 시간 복잡도
    • 접근 - O(n)
    • 탐색 - O(n)
    • 삽입 - O(1)
      • 원하는 노드에 접근 또는 탐색 + 삽입 O(n+1)
      • 가장 앞에 접근 + 삽입 O(1+1)
      • 가장 뒤에 접근 + 삽입 O(1+1)
    • 삭제 - O(1)
      • 원하는 노드에 접근 또는 탐색 + 삭제: O(n+1)
      • 가장 앞에 접근 + 삭제 : O(1+1)
      • 가장 뒤에 접근 + 삭제 : O(1+1)

싱글리 링크드 리스트의 삭제 연산은 지우려는 노드의 바로 전 위치의 노드를 파라미터로 받는다. 따라서 tail을 지우기 위해서는 tail 전 노드에 접근해서 파라미터로 넘겨줘야한다. 따라서 비효율적

더블리 링크드 리스트의 삭제 연산을 할 때는 지우려는 노드 자체를 파라미터로 받는다. tail 노드는 링크드 리스트의 속성으로 저장하고 있기 때문에 바로 가지고 와서 삭제 연산의 파라미터로 넘겨주면 효율적으로 tail 노드를 삭제할 수 있다. 따라서 효율적

[2] Week5 UpdateDate 계산 부분 리팩토링

기존 if-else 문으로 복잡하게 작성했던 조건 계산 부분을 객체 리터럴을 사용해서 깔끔하게 정리할 수 있었다 (with ChatGPT)

  • 기존

  • 리팩토링 후
    특히 formattedTimeDiff를 사용해서 1보다 크면 unit에 s를 붙이는 것이 인상깊었다. 리팩토링할 때 아이디어가 떠오르지 않는다면 chatGPT에게 물어보는 것은 굉장히 폭발적인 힘이 있는 것 같다.

공부하면서 어떤 어려움이 있었나요?

  1. Vanilla JS로 구성된 사이트의 환경변수 관리

    현재는 common.js에 export BASE_URL = "~~" 이런 식으로 객체화를 해뒀는데, 보통은 개발을 하면서 환경 변수는 .env에 뒀던 게 생각이 났다.(react에서 ㅎㅎ) 하지만 프레임워크나 라이브러리 없이는 사용할 수 없었다. netlify에서 하는 방법도 너무 복잡해 보임 + 어쨋든 라이브러리 설치 인 것 같아서 멘토님한테 의견을 물어본 상태이다!

내일의 나는 무엇을 공부해야 할까요?

  • 기본 자료구조 강의 듣기
  • Weekly Mission PR 올리기

0개의 댓글