맞왜틀 하느라 정말 고생했습니다. ㅎㅎ
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;
}
}
자료구조 골치 아플 줄 알았는데 재밌네요. 원래부터 퍼즐 좋아해서 그런가... 여유 시간에 알고리즘 파면 재밌을것 같네요 ㅎㅎ