Cooper's devlog

[TIL]2021.01.11 본문

TIL

[TIL]2021.01.11

cooper_dev 2021. 1. 12. 11:39

[LinkedList 직접 구현하기]

 나는 첫 프로그래밍을 알고리즘으로 시작했었다. 하지만 그 당시에는 내부 구조보다 문제해결에 초점을 두고 공부했다.하지만 자료 구조의 내부 구조 학습이 필요했다. 왜냐하면 프로그램은 구현을 하는 것도 중요하지만 내부에서 얼마나 효율적인지도 중요하기 때문이다. 이전에 Stack과 Queue를 직접 구현해봤지만 LinkedList는 Node(포인터) 개념이 익숙하지 않아 코드만 따라해보고 말았던 기억이 있다. 어차피 공부할 내용을 나중으로 미룬 것 같아 후회가 됐지만 이번 기회에 다시 한번 열심히 해보자고 행각했다.

 DoublyLinkedList는 기존 SigleLinkedList보다 구현이 까다로웠다. 각 Node는 이전(prev)와 다음(next) 노드를 모두 참조하고 있기 때문에 CRUD를 할 때, 참조하는 요소들이 많기 때문이다. 그래서 각각의 노드에 대해 연결하는 방식이 생각보다 까다로웠다.

 가장 헷갈렸던 부분은 remove였다. remove의 경우 node를 제거할 때, 현재 인덱스 이전 노드를 검색하고 다다음 노드와 연결하는 작업을 해야 하는데 계속해서 nullPointerException이 발생했다. 어디가 문제인지 계속해서 찾아보니 가장 마지막 노드와 그 이전 노드를 참조할 때 다다음 node 자체가 null이기 때문에 다음 노드를 참조할 수 없다는 것이었다.

그리고 다음(next.next)의 노드의 이전 노드를 자기 자신으로 표시를 해줘야 하는데 그 부분을 놓치고 있었다. 그래서 해당 로직을 수정하고 가장 마지막을 참조하는 내용을 removeLast method를 만들어서nullPointerException을 처리했다.

괜히 이전에 C++하시는 분들이 포인터에서 고통받는다는 이야기를 조금이나마 공감했던 하루였다.

 

[마스터즈 적응기]

 마스터즈 시작하면서 시간할애를 못하고 있다ㅠ. 기존 학습 방법은 check-list를 만들어두고 하나씩 지워나가며 공부했다. 하지만 잘못된 점이 2가지가 있다.

 

  1. 너무 방대한 체크리스트를 만들면 해당 체크리스트에 시간 할애를 많이한다.
  2. 하나에 꽂혀서 하다보면 다른 체크리스트를 하지 못한다.

두가지 때문에 학습 밸런스가 흔들리는 것 같다. 개선점이 필요했다. 그래서 그룹원들에게 조언을 어쭙고자 어떻게 학습하고 있는지 질문했다. 그 중 한분이 시간을 분할해서 학습한다는 것이었다. 아침과 저녁에 의무적으로 시간을 분리해서 관련서적을 읽고 다른 시간에는 주로 자유롭게 시간을 할애한다고 하셨다. 별도로 시간을 따로 빼놓지 않으면 공부를 하기 쉽지 않기 때문이다.

 한번 이 조언을 듣고 그대로 한번 따라봐야겠다. 아직 내 최적의 학습방법을 찾지 못했다. 한번 계속 다른 분들의 좋은 습관들을 참고해서 가장 적합한 학습방법을 찾아야겠다.

 

계속해서 그룹원들과 성장하고 있는거 같아 기분이 좋다👏

'TIL' 카테고리의 다른 글

[TIL] 2021.01.13  (0) 2021.01.13
[TIL] 2021.01.12  (0) 2021.01.12
[TIL] 2020.01.08  (0) 2021.01.09
[TIL] 2020.01.07  (0) 2021.01.08
[TIL] 2021.01.06  (0) 2021.01.06
Comments