[Javascript] Max Heap 구현 (w. 백준 11279 최대 힙)

Chaedie·2022년 6월 16일
0

Javascript - PS

목록 보기
9/24
post-thumbnail
post-custom-banner

서론

맞왜틀 하느라 정말 고생했습니다. ㅎㅎ
while문을 넣어야 하는 곳에 if문을 넣어서 샘플케이스에선 통과되는데!!!! "맞왜틀!!!!" 하느라 30분은 소모했네요 🤣🤣🤣🤣🤣🤣🤣

맥스 힙 구현

class MaxHeap {
  constructor() {
    this.heap = [null];
  }

  swap(a, b) {
    [this.heap[a], this.heap[b]] = [this.heap[b], this.heap[a]];
  }

  size() {
    return this.heap.length - 1;
  }

  empty() {
    return this.size() === 0;
  }

  push(value) {
    this.heap.push(value);
    let cur = this.heap.length - 1;
    let par = Math.floor(cur / 2);

    //if (par > 0 && this.heap[par] < value) { 
    // 맞왜틀은 무슨 틀왜틀이지 🤣🤣🤣
    while (par > 0 && this.heap[par] < value) {
      this.swap(cur, par);
      cur = par;
      par = Math.floor(cur / 2);
    }
  }

  pop() {
    if (this.empty()) {
      return 0;
    }
    if (this.size() === 1) {
      return this.heap.pop();
    }
    let returnValue = this.heap[1];
    this.heap[1] = this.heap.pop();

    let cur = 1;
    let left = 2;
    let right = 3;

    while (this.heap[cur] < this.heap[left] || this.heap[cur] < this.heap[right]) {
      if (this.heap[left] < this.heap[right]) {
        this.swap(cur, right);
        cur = right;
      } else {
        this.swap(cur, left);
        cur = left;
      }
      left = cur * 2;
      right = cur * 2 + 1;
    }

    return returnValue;
  }
}

소감

자료구조 골치 아플 줄 알았는데 재밌네요. 원래부터 퍼즐 좋아해서 그런가... 여유 시간에 알고리즘 파면 재밌을것 같네요 ㅎㅎ

profile
TIL Blog - Today's Intensive Learning!
post-custom-banner

0개의 댓글