오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!
isFull()
: 큐에 데이터 원소가 꽉 차있는지를 판단합니다.True
를, 빈 공간이 있으면 False
를 반환합니다.배열로 구현된 큐에서 큐의 맨 앞 데이터를 제거할 때(dequeue()
), 모든 원소를 뒤로 미는 것 때문에 시간이 오래 걸렸습니다.
그러나, 환형/원형 큐는 큐의 크기가 정해져 있고, front
와 rear
를 활용하여 큐를 돌려가며 이용하기 때문에 dequeue()
역시 빠르게 수행될 수 있습니다.
class CircularQueue:
def __init__(self, n):
self.maxCount = n
self.data = [None] * n
self.count = 0
self.front = -1
self.rear = -1
def size(self):
return self.count
def isEmpty(self):
return self.count == 0
def isFull(self):
return self.count == self.maxCount
def enqueue(self, x):
if self.isFull():
raise IndexError('Queue full')
self.rear = (self.rear + 1) % self.maxCount
self.data[self.rear] = x
self.count += 1
def dequeue(self):
if self.isEmpty():
raise IndexError('Queue empty')
self.front = (self.front + 1) % self.maxCount
x = self.data[self.front]
self.count -= 1
return x
def peek(self):
if self.isEmpty():
raise IndexError('Queue empty')
return self.data[(self.front+1) % self.maxCount]
dequeue()
)하는 우선순위 큐enqueue(x)
)할 때 우선순위 유지하기dequeue()
)할 때 우선순위 유지하기enqueue(x)
할 때 우선순위를 유지합니다.enqueue(x)
: , dequeue(x)
: 이 됩니다.from doublylinkedlist import Node
from doublylinkedlist import DoublyLinkedList
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
enqueue(x)
의 경우 x의 크기가 다음 노드의 data의 크기보다 작을 때 그 위치에 삽입합니다.dequeue()
연산을 통해 가장 마지막에 있는 원소를 제거할 때 한 번에 제거할 수 있습니다.이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.