Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- augmentedDevice
- Each child in a list should have a unique "key" prop.
- electron-packager
- dvh
- 티스토리 성능
- custom printing
- animation
- camera access
- adb pair
- ELECTRON
- Failed to compiled
- html
- github 100mb
- react-native
- Recoil
- silent printing
- npm package
- device in use
- github lfs
- vercel git lfs
- adb connect
- nextjs
- Git
- rolldown
- react-native-dotenv
- ffi-napi
- github pdf
- camera permission
- Can't resolve
- 이미지 데이터 타입
Archives
- Today
- Total
Bleeding edge
Queue를 class로 구현해보자. 본문
오늘 문제를 풀다가 queue를 구현해야 풀 수 있는 문제를 만났다. 평소에 queue라는 것을 생각하면, FIFO에 대해서만 생각하고 생각을 끝냈던 것 같다. 먼저 들어가면 먼저 나온다. 그래서 오늘 백준에서 문제를 풀이할 때 queue의 구현성을 먼저 생각하지 못했던 것 같다.
queue 언제 쓸까?
아니, queue의 특징을 조금 더 나열하는게 좋을 것 같다.
- FIFO
- search bigO(n)
- insert bigO(1)
- delete bigO(1)
탐색이 적고, enqueue dequeue가 많은 경우에 사용하기 좋다. 이전에 스택 문제를 풀 때 스택을 구현하여도 불편하지 않았던 이유는 배열을 이용하여 pop을 이용하여도 손쉽게 풀리며 배열을 사용하면, search도 1, pop도 1 push도 1이기때문에 별다른 불편함이 없이 쉽게 풀었던 것 같다.
queue 를 구현하려면 필요한 것
- 본인 개인(Node)
- 전체 맵(Linked List)
두가지가 필요하다. 먼저 각 노드를 구선언해보자.
본인의 앞뒤가 누구인지 확인하고, 전체의 맨끝과 맨앞이 필요하다. 우선 본인 개인의 클래스를 선언해보자. 본인이 알아야할 것은 본인의 숫자, 앞, 뒤 세가지이다.
class Node{
constructor(number){
this.value = number;
this.prev = null;
this.next = null;
}
}
이제 전체 맵을 선언해보자. 전체 맵에는 head, tail, value가 필요하고, head를 얻는 것과 length를 얻는 것, head를 제거하는 것 3개가 필요하다
class LinkedList {
#size
constructor(){
this.head = null;
this.tail = null;
this.#size = 0;
}
add(n){
const node = new Node(n);
if(!this.head) this.head = node;
else{
this.tail.next = node;
node.prev = this.tail
}
this.tail = node
this.#size++
return node
}
getHead(){
return this.head.value;
}
removeHead(){
this.head = this.head.next;
this.head.prev = null;
this.#size --;
}
getLength(){
return this.#size;
}
}
문제에서 무엇을 필요하고 어떤 흐름으로 흐르는지 알게 되니 queue가 자연스럽고 쉽게 구현이 된 것 같다! 내가 잘이해하고 있나 내일 다시 테스트 봐야지!
'Javascript' 카테고리의 다른 글
새로고침과 창끄기를 구분하는 방법 (0) | 2023.04.12 |
---|---|
브라우저에서 로컬파일 여는 방법 (0) | 2023.01.25 |
클린코드 작성하기 (0) | 2022.07.10 |
fetch로 카테고리별로 분류하기 (0) | 2022.07.09 |
Map의 저장방법 두가지 (0) | 2022.06.27 |