์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿฅš/๋ฌธ์ œํ’€์ด (Python)

[LeetCode] 641. design_circular_deque (Medium) 2023/5/11

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 5. 11. 08:11
728x90
๋ฌธ์ œ ์ œ๋ชฉ ์ •๋‹ต๋ฅ  ๋‚œ์ด๋„
641. design_circular_deque 57.2% Medium
 

Design Circular Deque - LeetCode

Can you solve this real interview question? Design Circular Deque - Design your implementation of the circular double-ended queue (deque). Implement the MyCircularDeque class: * MyCircularDeque(int k) Initializes the deque with a maximum size of k. * boole

leetcode.com

 

 

๋ฌธ์ œ์š”์•ฝ

๋‹ค์Œ ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•˜๋Š” ์›ํ˜• ๋ฐํฌ๋ฅผ ๋งŒ๋“ค์–ด๋ผ

  • def __init__(self, kint):    k ํฌ๊ธฐ์˜ ์›ํ˜•๋ฐ๋ฅผ ์„ ์–ธ
  • def insertFront(selfvalueint) -> bool:    value ๊ฐ’์„ head ์™ผ์ชฝ์— ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜
  • def insertLast(selfvalueint) -> bool:    value ๊ฐ’์„ tail ์˜ค๋ฅธ์— ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜
  • def deleteFront(self) -> bool:    ์›ํ˜•๋ฐํฌ์˜ head ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜ 
  • def deleteLast(self) -> bool:    ์›ํ˜•๋ฐํฌ์˜ tail ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜ 
  • def Front(self) -> int:    ์›ํ˜•๋ฐํฌ์˜ head ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • def Rear(self) -> int:    ์›ํ˜•๋ฐํฌ์˜ tail ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • def isEmpty(self) -> bool:    ์›ํ˜•๋ฐํฌ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ•จ์ˆ˜
  • def isFull(self) -> bool:    ์›ํ˜•๋ฐํฌ์— ์—ฌ๋ถ„์˜ ์ž๋ฆฌ๊ฐ€ ์—†๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ•จ์ˆ˜

 

ํ’€์ด 1

์›ํ˜• ๋””ํ๋Š” ๋ฆฌ์ŠคํŠธ์™€, head, tail ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ตฌํ˜„ ์ˆœ์„œ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ์šฉ์ดํ•œ ๊ฒƒ๋ถ€ํ„ฐ ํ•œ๋‹ค

๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ,

  • ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ
  • head, tail ์ธ๋ฑ์Šค๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ์ œ์ผ ์ฒซ์ž๋ฆฌ(0)์™€ ์ œ์ผ ๋์ž๋ฆฌ(len(์›ํ˜•ํ)-1)์— ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•˜์ž(ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๋‹ค์Œ ์ธ๋ฑ์Šค๋Š” ์ œ์ผ ๋์ž๋ฆฌ์™€ ์ œ์ผ ์ฒซ์ž๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค)

 

__init__

front, rear

isEmpty, isFull

insertFront, insertLast, deleteFront, deleteLast

 

 

๊ตฌํ˜„ (96ms)

class MyCircularDeque:
    def __init__(self, k: int):
        self.head, self.tail=0, 0
        self.q=[None]*k

    def insertFront(self, value: int) -> bool:
        if self.isFull():
            return False
        if self.isEmpty()==False:
            if self.head==0:
                self.head=len(self.q)-1
            else:
                self.head-=1
        self.q[self.head]=value
        return True

    def insertLast(self, value: int) -> bool:
        if self.isFull():
            return False
        if self.isEmpty()==False:
            if self.tail==len(self.q)-1:
                self.tail=0
            else:
                self.tail+=1
        self.q[self.tail]=value
        return True

    def deleteFront(self) -> bool:
        if self.isEmpty():
            return False
        self.q[self.head]=None
        if self.head!=self.tail:
            if self.head==len(self.q)-1:
                self.head=0
            else:  
                self.head+=1
        return True

    def deleteLast(self) -> bool:
        if self.isEmpty():
            return False
        self.q[self.tail]=None
        if self.head!=self.tail:
            if self.tail==0:
                self.tail=len(self.q)-1
            else:
                self.tail-=1
        return True

    def getFront(self) -> int:
        if self.isEmpty():
            return -1
        return self.q[self.head]

    def getRear(self) -> int:
        if self.isEmpty():
            return -1
        return self.q[self.tail]

    def isEmpty(self) -> bool:
        return self.q[self.head]==None
        
    def isFull(self) -> bool: 
        if self.tail==len(self.q)-1:
            return self.head==0 and self.tail!=None
        else: #tail<head ์ธ ๊ฒฝ์šฐ
            return self.tail==(self.head-1)
728x90