오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!
insert(item)
: 새로운 원소 item
을 힙에 삽입합니다.remove()
: 최대/최소 원소 (root node)를 삭제하며, 반환합니다.def insert(self, item):
self.data.append(item)
m = len(self.data) - 1
while m > 1:
p = m // 2
if self.data[p] < self.data[m]:
self.data[p], self.data[m] = self.data[m], self.data[p]
m = p
else:
break
def remove(self):
if len(self.data) > 1:
self.data[1], self.data[-1] = self.data[-1], self.data[1]
data = self.data.pop(-1)
self.maxHeapify(1)
else:
data = None
return data
def maxHeapify(self, i):
left = i*2
right = i*2 + 1
smallest = i
if left < len(self.data) and self.data[left] > self.data[smallest]:
smallest = left
if right < len(self.data) and self.data[right] > self.data[smallest]:
smallest = right
if smallest != i:
self.data[smallest], self.data[i] = self.data[i], self.data[smallest]
self.maxHeapify(smallest)
이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.