TIL_20.07.23 πŸƒπŸ½β€β™‚οΈπŸƒπŸ½β€β™‚οΈ

Doum KimΒ·2020λ…„ 7μ›” 23일
0

TIL

λͺ©λ‘ 보기
16/71
post-thumbnail

Codestates immersive course


μ΄λ¨Έμ‹œλΈŒ 두 번째 μŠ€ν”„λ¦°νŠΈ Data Structure

이번 μŠ€ν”„λ¦°νŠΈμ—μ„œλŠ” 자료 ꡬ쑰에 λŒ€ν•œ λ‚΄μš©μ΄λ‹€.
κ·Έ μ€‘μ—μ„œλ„ μ˜€λŠ˜μ€ 자료 ꡬ쑰가 무엇인지? κ·Έ μ€‘μ—μ„œ stackκ³Ό queue에 λŒ€ν•΄μ„œ 닀루어 λ΄€λ‹€.
자료 ꡬ쑰에 λŒ€ν•΄μ„œ κ³΅λΆ€ν•΄λ³΄λŠ”κ±΄ μ²˜μŒμ΄μ˜€λ‹€. call stack λ•Œλ¬Έμ— stack이 어떀건지 λŒ€μΆ© 감은 μ™”μ§€λ§Œ
queue에 λŒ€ν•΄μ„œλŠ” μ•„μ˜ˆ 처음 λ³΄λŠ” λ‚΄μš©μ΄μ˜€λ‹€.

과제λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 직접 자료ꡬ쑰λ₯Ό λ§Œλ“€μ–΄λ³΄κ³  λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•΄λ³΄λ©΄μ„œ μ•„ 좔상적 κ°œλ…μ΄ 적용된 data ꡬ쑰λ₯Ό λ§Œλ“œλŠ” κ±°κ΅¬λ‚˜λΌκ³  κΉ¨λ‹¬μ•˜λ‹€.
μ—­μ‹œ 직접 λ§Œλ“€μ–΄λ³΄λŠ”κ²Œ 졜고...

주말에 각 자료ꡬ쑰의 μž₯, 단점과 μ–΄λ–€ μƒν™©μ—μ„œ μ–΄λ–€ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•΄μ„œ νš¨μœ¨μ„±μ„ 높일 수 μžˆμ„κΉŒ 정리λ₯Ό ν•΄μ•Όκ² λ‹€.

자료 κ΅¬μ‘°λž€?

자료ꡬ쑰(資料構造, μ˜μ–΄: data structure)λŠ” 컴퓨터 κ³Όν•™μ—μ„œ 효율적인 μ ‘κ·Ό 및 μˆ˜μ •μ„ κ°€λŠ₯μΌ€ ν•˜λŠ” 자료의 쑰직, 관리, μ €μž₯을 μ˜λ―Έν•œλ‹€. 더 μ •ν™•νžˆ 말해, 자료 κ΅¬μ‘°λŠ” 데이터 κ°’μ˜ λͺ¨μž„, 또 데이터 κ°„μ˜ 관계, 그리고 데이터에 μ μš©ν•  수 μžˆλŠ” ν•¨μˆ˜λ‚˜ λͺ…령을 μ˜λ―Έν•œλ‹€. μ‹ μ€‘νžˆ μ„ νƒν•œ μžλ£Œκ΅¬μ‘°λŠ” 보닀 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•  수 있게 ν•œλ‹€. μ΄λŸ¬ν•œ 자료ꡬ쑰의 μ„ νƒλ¬Έμ œλŠ” λŒ€κ°œ 좔상 μžλ£Œν˜•μ˜ μ„ νƒμœΌλ‘œλΆ€ν„° μ‹œμž‘ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. 효과적으둜 μ„€κ³„λœ μžλ£Œκ΅¬μ‘°λŠ” μ‹€ν–‰μ‹œκ°„ ν˜Ήμ€ λ©”λͺ¨λ¦¬ μš©λŸ‰κ³Ό 같은 μžμ›μ„ μ΅œμ†Œν•œμœΌλ‘œ μ‚¬μš©ν•˜λ©΄μ„œ 연산을 μˆ˜ν–‰ν•˜λ„λ‘ ν•΄μ€€λ‹€.
좜처 - μœ„ν‚€ λ°±κ³Ό

자료 ꡬ쑰의 νŠΉμ§•μ€ 3가지가 μžˆλ‹€.

  1. νš¨μœ¨μ„±
  2. 좔상화
  3. μž¬μ‚¬μš©μ„±

였늘 λ‹€λ£¨μ—ˆλ˜ stackκ³Ό queueλŠ” 일단 μ„ ν˜• ꡬ쑰의 ν˜•νƒœλ₯Ό 띄고 μžˆλ‹€.

stack

Last in first out - LIFO 의 자료ꡬ쑰이고

  • pop() μŠ€νƒμ˜ κ°€μž₯ μœ— 데이터 μ‚­μ œ
  • push() μŠ€νƒμ˜ top이 κ°€λ¦¬ν‚€λŠ” μžλ¦¬μ— λ©”λͺ¨λ¦¬λ₯Ό 생성, 데이터 μΆ”κ°€
  • peek() μŠ€νƒμ˜ κ°€μž₯ μœ— 데이터λ₯Ό λ°˜ν™˜
  • isEmpty() μŠ€νƒμ΄ λΉ„μ—ˆλ‹€λ©΄ 1을 λ°˜ν™˜ μ•„λ‹ˆλ©΄ 0을 λ°˜ν™˜


stack

class Stack {
  constructor() {
    this.store = [];
  }
  push(item) {
    this.store.push(item);
  }
  pop() {
    return this.store.pop();
  }
  top() {
    return this.store[this.store.length - 1];
  }
}

const stack = new Stack();

stack.push(123);
stack.push(2);
stack.push(3);
stack.pop();
stack.push(4);

console.log(stack.top()); // 4
console.log(stack.store); // [123,2,4]

queue

First in first out - FIFO 의 자료ꡬ쑰이고

  • enqueue() rear 에 데이터 μ‚½μž…
  • dequeue() front 데이터 제거 및 λ°˜ν™˜

queue

class Queue {
  constructor() {
    this.store = [];
  }
  enqueue(item) {
    this.store.push(item);
  }
  dequeue() {
    return this.store.shift();
  }
}

const queue = new Queue();

queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);

console.log(queue.dequeue()); //1
console.log(queue.dequeue()); //2
console.log(queue.store); //[3,4]

PriorityQueue

class PriorityQueue {
  constructor() {
    this.store = [];
  }

  enqueue(item) {
    this.store.push(item);
  }

  dequeue() {
    let entry = 0;
    this.store.forEach((item, index) => {
      if (this.store[entry] < this.store[index]) {
        entry = index;
      }
    });

    return this.store.splice(entry, 1);
  }
}

const priorityQueue = new PriorityQueue();

priorityQueue.enqueue(10);
priorityQueue.enqueue(30);
priorityQueue.enqueue(20);
priorityQueue.enqueue(70);
priorityQueue.enqueue(50);

priorityQueue.dequeue();
priorityQueue.dequeue();
priorityQueue.dequeue();

console.log(priorityQueue.store); // [10,20]

0개의 λŒ“κΈ€