ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 622. Design Circular Queue
    Programming/leetcode 2021. 2. 18. 20:55
    728x90

    Circle Queue(원형 큐)를 구현해보자

     

    원형 큐는 일반적인 큐와 다르게 끝나는 지점이 다시 시작으로 이어져서 기존 큐의 단점을 극복가능하다.

    (기본 큐는 지나온 지점을 다시 재활용이 불가능하다.)

     

    구현 방법에는 일반적으로는 front와 rear, 두 포인터를 가지고 구현을 한다. 

    또한, 배열에 특별한 값(None)을 사용해서 현재 사용중인지 아닌지 구분한다. 

     

    class MyCircularQueue:
        def __init__(self, k: int):
            self.front = 0
            self.rear = 0
            self.queue = [None] * k
            self.len = k
        def enQueue(self, value: int) -> bool:
            # rear 지점에 None일 경우에는 비어 있는 상태
            if self.queue[self.rear] is None:
                self.queue[self.rear] = value
                self.rear = (self.rear + 1) % self.len
                return True
            else: # Queue의 rear지점이 None이 아니면 오류 생긴것
                return False
    
        def deQueue(self) -> bool:
            # enQueue와는 반대로 front 지점이 None이면 저장상태가 아님
            if self.queue[self.front] is None:
                return False
            else:
                # front의 지점은 None으로 만든다
                self.queue[self.front] = None
                self.front = (self.front + 1) % self.len
                return True
    
        def Front(self) -> int:
            return -1 if self.queue[self.front] is None else self.queue[self.front]
    
        def Rear(self) -> int:
            # rear는 enQueue에서 +1을 먼저 하므로 Rear()를 호출할때는 -1을 해준다.
            return -1 if self.queue[self.rear-1] is None else self.queue[self.rear-1]
    
        def isEmpty(self) -> bool:
            return self.front == self.rear and self.queue[self.front] is None
    
        def isFull(self) -> bool:
            return self.front == self.rear and self.queue[self.front] is not None

     

     

    'Programming > leetcode' 카테고리의 다른 글

    23. Merge k Sorted Lists  (0) 2021.02.19
    641. Design Circular Deque  (0) 2021.02.19
    232. Implement Queue using Stacks  (0) 2021.02.18
    225. Implement Stack using Queues  (0) 2021.02.17
    739. Daily Temperatures  (0) 2021.02.17
Designed by Tistory.