데브코스 TIL/자료구조, 알고리즘

16강: 우선순위 큐(Priority Queues)

예니ㅣ 2023. 10. 18. 12:29

강의

"우선순위 큐"는 선입선출 방식이 아닌 우선순위에 따라 큐에서 빠져나오는 방식입니다.

 

예시로는 운영체제의 CPU 스케줄러가 있습니다.

 

구현

1. 방식 선택

  • Enqueue 할 때 우선순위 순서를 유지 : 시간적으로 유리함
  • Dequeue 할 때 우선순위 높은 것을 선택

2. 자료구조 선택

  • 배열 : 공간적으로 유리함
  • 연결 리스트 : 시간적으로 유리함

 

 

16강 실습: 

⭐ 효율성을 높이는 함수를 선택하는 문제!

class PriorityQueue:

    def __init__(self):
        self.queue = DoublyLinkedList()


    def size(self):
        return self.queue.getLength()

    def isEmpty(self):
        return self.size() == 0

    def enqueue(self, x):
        newNode = Node(x)
        curr = self.queue.head

        while curr.next != self.queue.tail and x < curr.next.data:
            curr = curr.next
        self.queue.insertAfter(curr, newNode)

    def dequeue(self):
        return self.queue.popAt(self.queue.getLength())

    def peek(self):
        return self.queue.getAt(self.queue.getLength()).data