티스토리 뷰

TIL

## 2020 0613, 0614 스물두번째 TIL

CREDD 2020. 6. 15. 00:24

linkedlist, hashtable에 거의 3일을 쏟아부었다.

개념으로는 이해가 다 되는데 그걸 코드로 구현하는게 굉장히 어려웠고, 날이 넘어가기 바로 전에야 코드를 다 찍을 수 있었다.

내가 멍청해서 우겨댔다고 생각했던 부분을 코드로 구현했고, 다른 어떤것보다 이 부분이 만족스럽다.

class의 기본 개념이 아직 부족해서 this.--를 찍으면 뭐가 어떻게 나오는지 일일이 return 쳐가면서 했어야 했지만

결과는 나름대로 만족스럽다.

 

하지만 아직 hashtable의 risize는 구현하지 못했다.

페어 분과 접속해 있던 몇몇 페어분들께 여쭤봤지만 아직 공부가 부족해서 완전히 이해를 할 수 없었다.

이해를 할 수 없었기 때문에 로직이고 뭐고 resize함수는 아직도 백지 그대로이다.

자료 좀 더 찾아보고, 코드 구현이 가능할 정도로 이해하고 싶다.

 

 

 

#### 오늘 한 일

* 데이터 스트럭쳐 - linkedlist

 ㄴ 혼자서 구현해봤다.

 ㄴ 테스트 케이스는 다 통과했지만, 이 과정중에 내 코드랑 상관 없이 통과한 부분도 있었기 때문에

     테스트를 통과했다고 완벽하게 구현했다고 보기는 좀 힘들것 같다.

  ㄴ 그래도 혼자 해 볼 정도로 개념이해는 된 것 같다.

remove(value) {
    this._size -= 1;
    //1.해당노드가 헤드일경우
      //1-1. 헤드 노드 삭제
      //1-2. 헤드.넥스트 노드를 헤드로 지정
    //2.해당노드가 중간일경우      [a,b,c,d,e] 
      //2-1. 중간노드 탐색       c
      //2-2. 해당 노드(c) 전의 노드(b).next가 해당노드(c)일 경우 해당 노드 전(b).next = 해당노드(c) .next(d)
      //if(this.next === value){
    //3.해당노드가 테일일 경우
      //3-1. 해당 노드 삭제
      
    if(value === this.head.value){//헤드일 경우
      let deleted = this.head
      this.head = this.head[this.next]
      deleted = null
       
    }
    else if(value === this.tail.value){//테일일 경우
      let deleted = this.tail
      deleted = null;
      
    }
    else{//중간일 경우
      let prenode = this.head
      let deleted = this.head[this.next]

      for(let i = 0; i<this._size; i += 1){
        if(value === deleted.value){
          prenode.next = deleted.next
          return deleted = null
        }
        else{
          prenode = prenode[this.next]
          deleted = deleted[this.next]
        }
      }
    }

  }

ㄴ 내가 구현할 수 없어서 틀렸다고 생각했던 부분. 근데, 그 때의  내 로직으로는 구현할 수 없었던 것이 맞았다.

ㄴ 변수를 두개를 만들어야지만 가능했다.

ㄴ 값이 객체라고 생각해서 delete로 한참을 끙끙댔는데, 결국 답은 다른 곳에 있었다. 

ㄴ 아직 class로 찍은 결과값이 제대로 이해가 되지 않았으니 더 공부할 것.

 

 

 

* 데이터 스트럭쳐 - hash table

  ㄴ 이해했다고 생각했지만, 그 과정에서 페어분의 버스를 탄 거 같아서 혼자서 구현해 보려고 했다.

  ㄴ 인덱스가 같은 값을 넣는 방법이 두 가지가 있었지만 인덱스 값을 바꿔서 넣는것은 로직이 이해가 가질 않아 chaining으로 구현했다.

  ㄴ linked list와 마찬가지로 테스트는 통과했지만(resize 제외) 저 테스트 케이스가 모든 경우를 커버하는 것이 아닌 걸 알고 나니

      정말로 구현을 한 것인지 의심이 된다.

insert(key, value) {
    const index = hashFunction(key, this._limit/*key = 1, this_limit = 8*/);
    let bucket = [];
    let tuple = [key, value]
    bucket.push(tuple)
    if(!(this._storage.get(index))){//index값이 storage에 없을 경우
      this._storage.set(index,bucket)//{0:[key,value], 1:[[key2,val2],[key3,val3]]}
    }
    
    
    else{//index값이 storage에 있을 경우
      for (let i = 0; i<this._storage.get(index).length; i+= 1){
        if(this._storage.get(index)[0][0] === key){//key값이 같을 때
          return this._storage.set(index,bucket)
        }
        else if(this._storage.get(index)[0][0] !== key){//key값이 다르지만 index값은 같을 때
          this._storage.get(index).push(tuple)
          return this._storage.set(index,this._storage.get(index))
        }

      }
      
    }
    //bucket.push(tuple)//bucket = [[v2,v2]]
  }

ㄴ 값이 어떻게 들어가는지 하나하나 return을 찍으면서 코딩을 했기 때문에.. 가독성이 굉장히 좋지 않다.

ㄴ 아직까지는 그냥 작동만 하면 되지 정도의 느낌이긴 한데.. 가독성 또한 신경을 써야 할 부분이 맞는 것 같다.

 

 

 

 

 


#### 오늘 하려고 한 일
- til 쓰기(빼먹지 않기) o

- 일정끝나고 복습하기 o

- hash table 혼자서 풀어보기 o

- 된다면 linked list도 o

 

 


#### 내일 할 일

- resize 자료 찾아보고 이해하기

- 내일 배울 자료구조 이해하기

'TIL' 카테고리의 다른 글

## 2020 0617 스물네번째 TIL  (0) 2020.06.17
## 2020 0615, 0616 스물세번째 TIL  (0) 2020.06.16
## 2020 0612 스물한번째 TIL  (0) 2020.06.13
## 2020 0611 스무번째 TIL  (0) 2020.06.11
## 2020 0610 열아홉번째 TIL  (0) 2020.06.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함