μ•Œκ³ λ¦¬μ¦˜πŸ₯š/λ¬Έμ œν’€μ΄ (Python)

[LeetCode] 622. design_circular_queue (Medium) 2023/5/10

πŸͺ„ν•˜λ£¨πŸͺ„ 2023. 5. 10. 04:15
728x90
문제 제λͺ© μ •λ‹΅λ₯  λ‚œμ΄λ„
622. design_circular_queue 51.5% Medium
 

Design Circular Queue - LeetCode

Can you solve this real interview question? Design Circular Queue - Design your implementation of the circular queue. The circular queue is a linear data structure in which the operations are performed based on FIFO (First In First Out) principle, and the

leetcode.com

 

 

λ¬Έμ œμš”μ•½

μ›ν˜• 큐λ₯Ό λ§Œλ“€μ–΄λΌ

μ›ν˜•νκ°€ λ³΄ν†΅μ˜ 큐와 λ‹€λ₯Έ 점은 제일 λ’€μ˜ μ£Όμ†Œκ°€ 제일 μ•žμ˜ μ£Όμ†Œμ™€ μ—°κ²°λ˜μ–΄ μžˆλ‹€λŠ” 것이닀(보톡 크기가 κ³ μ •λ˜μ–΄ μžˆλ‹€)

일반 큐와 λ‹€λ₯΄κ²Œ μ•žμͺ½κ³Ό μ—°κ²°λ˜μ–΄ μžˆμ–΄ μ•žλΆ€λΆ„μ˜ μ£Όμ†Œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμ–΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— μžˆμ–΄ μœ λ¦¬ν•˜λ‹€

  • def __init__(self, k: int):    k 크기의 μ›ν˜•νλ₯Ό μ„ μ–Έ
  • def enQueue(self, value: int) -> bool:    value 값을 μ›ν˜•νμ— μ‚½μž…ν•˜λŠ” ν•¨μˆ˜
  • def deQueue(self) -> bool:    μ›ν˜•νμ˜ front 인덱슀의 값을 μ‚­μ œν•˜λŠ” ν•¨μˆ˜ (νμ΄λ‹ˆκΉŒ FIFO)
  • def Front(self) -> int:    μ›ν˜•νμ˜ front 인덱슀의 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
  • def Rear(self) -> int:    μ›ν˜•νμ˜ rear 인덱슀의 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
  • def isEmpty(self) -> bool:    μ›ν˜•νκ°€ λΉ„μ—ˆλŠ”μ§€ νŒλ‹¨ν•˜λŠ” ν•¨μˆ˜
  • def isFull(self) -> bool:    μ›ν˜•νμ— μžλ¦¬κ°€ μ—†λŠ”μ§€ νŒλ‹¨ν•˜λŠ” ν•¨μˆ˜

 

 

풀이 1

μ›ν˜• νλŠ” λ¦¬μŠ€νŠΈμ™€, front, rear 인덱슀λ₯Ό μ΄μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

front μΈλ±μŠ€λŠ” μ›ν˜• νμ—μ„œ 제일 λ¨Όμ € μ‚½μž…λœ 값을 가리킀고, rearλŠ” μ›ν˜• νμ—μ„œ 제일 λ‚˜μ€‘μ— μ‚½μž…λœ 값을 가리킨닀.

 

κ΅¬ν˜„ μˆœμ„œλŠ” κ΅¬ν˜„ν•˜κΈ° μš©μ΄ν•œκ²ƒλΆ€ν„° ν•œλ‹€

λͺ¨λ“  ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  λ•Œ,

  • 일반적인 경우
  • rear, front의 μΈλ±μŠ€κ°€ 제일 끝자리(len(μ›ν˜•ν)-1)에 μžˆλŠ” 경우λ₯Ό λ‚˜λˆ„μ–΄ μƒκ°ν•˜μž(ν•΄λ‹Ή 인덱슀의 λ‹€μŒ μΈλ±μŠ€λŠ” 0이기 λ•Œλ¬Έμ΄λ‹€)

__init__

front, rear

isEmpty, isFull

enQueue, deQueue

 

 

κ΅¬ν˜„ (82ms)

class MyCircularQueue:

    def __init__(self, k: int):
        self.circularqueue=[None]*k
        self.front=0
        self.rear=0

    def enQueue(self, value: int) -> bool:
        if self.isFull():
            return False
        if self.isEmpty()!=True:
            if self.rear!=(len(self.circularqueue)-1):
                self.rear+=1
            else:
                self.rear=0
        self.circularqueue[self.rear]=value
        return True

    def deQueue(self) -> bool:
        if self.isEmpty():
            return False
        self.circularqueue[self.front]=None
        if self.front!=self.rear:
            if self.front==(len(self.circularqueue)-1):
                self.front=0
            else:
                self.front+=1
        return True

    def Front(self) -> int:
        if self.isEmpty():
            return -1
        else:
            return self.circularqueue[self.front]

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

    def isEmpty(self) -> bool:
        return (self.circularqueue[self.front]==None)
        
    def isFull(self) -> bool:
        if self.rear==(len(self.circularqueue)-1):
            return self.front==0 and self.circularqueue[self.front]!=None
        else:
            return self.rear==(self.front-1)
728x90