[TIL] Day-3

yoon Y·2021년 8월 4일
0

데브코스 - TIL

목록 보기
2/19

자료구조에 대해 배웠다.
배열, 링크드리스트, 스택, 큐, 해시테이블에 대해 배우고
실습으로 문제도 풀어보았다.
클래스에 대한 개념이 아직 완벽하게 잡혀있지 않아서
클래스로 자료구조를 만들어서 사용하는 원리?를 이해하지 못했었는데
오늘 강의를 듣고, 코드를 직접 구현해보면서 드디어 감을 잡았다.

배열

  • 배열의 요소를 삭제하면 공간이 비게된다.
    → 이걸 메꾸려고 뒤의 요소들을 끌어당길 시 O(n)의 시간이 소요된다.
  • 큐 사용 시 shift()를 쓰면 안되는 이유이다.
  • splice()도 마찬가지이다.

큐를 사용해 문제를 풀 때 항상 shift()를 사용했었는데 이런 문제가 있는지 몰랐다.
앞으로는 직접 구현해서 사용해야겠다.

링크드 리스트

Node Class
객체 형태의 데이터 - 원하는 값을 가진 데이터를 만들 수 있다.
[값, Next] / [값, Next, prev]

List Class
노드를 생성,삭제하고 노드들의 관계를 이어주는 도구들의 모임.

포인터 변수
head / tail - 노드들의 처음과 끝을 가리키게해서 연결을 조작하기 위함.
필요에 따라 prev, current포인터 변수를 만들어 원하는 로직을 위한 기준으로 지정해 사용할 수 있음.

나만의 노하우(?)
전에 배웠을 때 왼쪽 항과 오른쪽 항에 어떤 것을 넣어야 할지 매우 헷갈렸다..
왼쪽 항을 포인터 변수, 오른쪽항 을 메모리 주소(값)라고 생각하니까 정확한 건진 모르겠지만 이해가 잘 되었다.

insert(node, newValue) {
        const newNode = new Node(newValue);
        newNode.next = node.next;
        node.next = newNode;
    }

스택 실습

프로그래머스 올바른 괄호

false가 나오는 2가지 경우

  1. 더 이상 s의 요소가 남지 않았는데 stack에 요소가 있는 경우
  2. s의 요소가 남았는데 stack에 (지울)요소가 없을 경우

2번째 예외를 생각하지 못해서 좀 해멨다.
충분히 모든 경우를 생각하지않고 문제부터 풀려는 습관을 고쳐야겠다.


코딩 실습 문제들을 다 풀지 못해서(너무 어려웠다..ㅠㅠ) 멘탈이 와장창이었다.
아직 논리적으로 사고하는 능력이 많이 부족하고, 해결 방법을 차근 차근 설계하는 것이 잘 되지 않는다.
꾸준히 하는 방법 밖엔 없겠지.

profile
#프론트엔드

0개의 댓글