LeetCode 622. Design Circular Queue

개발공부를해보자·2025년 1월 15일

LeetCode

목록 보기
25/95

파이썬 알고리즘 인터뷰 문제 25번(리트코드 622) Design Circular Queue
https://leetcode.com/problems/design-circular-queue/

나의 풀이

class MyCircularQueue:

    def __init__(self, k: int):
        self.size = k
        self.q = collections.deque()
        

    def enQueue(self, value: int) -> bool:
        if self.isFull():
            return False
        self.q.append(value)
        return True
        

    def deQueue(self) -> bool:
        if self.isEmpty():
            return False
        self.q.popleft()
        return True
        

    def Front(self) -> int:
        if self.q:
            return self.q[0]
        else:
            return -1
        

    def Rear(self) -> int:
        if self.q:
            return self.q[-1]
        else:
            return -1

    def isEmpty(self) -> bool:
        return not self.q

    def isFull(self) -> bool:
        return len(self.q) == self.size

# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()

다른 풀이

class MyCircularQueue:

    def __init__(self, k: int):
        self.q = [None] * k
        self.size = k
        self.p1 = 0
        self.p2 = 0
        
    def enQueue(self, value: int) -> bool:
        if self.q[self.p2] is None:
            self.q[self.p2] = value
            self.p2 = (self.p2 + 1) % self.size
            return True
        else:
            return False

    def deQueue(self) -> bool:
        if self.q[self.p1] is None:
            return False
        else:
            self.q[self.p1] = None
            self.p1 = (self.p1 + 1) % self.size
            return True
        
    def Front(self) -> int:
        if self.q[self.p1] is None:
            return -1
        else:
            return self.q[self.p1]
        

    def Rear(self) -> int:
        if self.q[self.p2 - 1] is None:
            return -1
        else:
            return self.q[self.p2 - 1]

    def isEmpty(self) -> bool:
        return self.p2 == self.p1 and self.q[self.p1] is None

    def isFull(self) -> bool:
        return self.p2 == self.p1 and self.q[self.p1] is not None

# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()

이런 문제는 스택을 써라, 큐를 써라, 링크드 리스트를 써라 이렇게 제한을 해주는게 좋을 것 같다. 통과가 되더라도 내 풀이가 치팅인지 올바른 풀이인지 모르겠다.
일반적으로는 스택으로 구현한다고 한다.

profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글