본문 바로가기

leetcode

스택/큐?

1. 선입선출! queue 

## 선입선출 
import queue
data = queue.Queue()
data.put(2)
first = data.get()

 

2. 후입선출! Stack ( append, pop ) 

stack = [1,2,3]
stack.append(4) 
last = stack.pop()
print(last, stack) # => 4 [1, 2, 3] 

## 
first = stack.pop(0) 
print(last, stack) # => 1 [2, 3, 4]

 

3. 양방향큐! deque

from collections import deque

deq = deque()

deq.appendleft(10) # Add first
deq.append(0) # Add last

deq.popleft() # pop first 
deq.pop() # pop last

# list -> deque 
my_list = [1, 2, 3, 4, 5]
my_deque = deque(my_list)

 

데크(deque)에 존재하는 메서드(method)는 대략 다음과 같다.

  • deque.append(item): item을 데크의 오른쪽 끝에 삽입한다.
  • deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입한다.
  • deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.extend(array): 주어진 배열(array)을 순환하면서 데크의 오른쪽에 추가한다.
  • deque.extendleft(array): 주어진 배열(array)을 순환하면서 데크의 왼쪽에 추가한다.
  • deque.remove(item): item을 데크에서 찾아 삭제한다.
  • deque.rotate(num): 데크를 num만큼 회전한다(양수면 오른쪽, 음수면 왼쪽)

참조 : https://chaewonkong.github.io/posts/python-deque.html

 

----------- 다른거임. 앤 트리임 --------------

4. 우선순위 queue  (정렬 자동 )

 

from queue import PriorityQueue

q = PriorityQueue() 
q1 = PriorityQueue(maxsize=10) # maxsize를 활용하면 크기 제한 가능
q.put(3) # 원소를 넣는 과정
q.get() # 1
q1.get()[1] # (우선순위, 값)의 형태에서 값 반환

Python의 queue.PriorityQueue 클래스는 우선순위 큐를 구현한 것이며, 내부적으로는 힙(heap)을 사용하여 구현됩니다. 따라서 이것은 힙큐와 같은 개념입니다.

queue.PriorityQueue 클래스는 다음과 같은 특징을 가지고 있습니다:

  1. 우선순위 큐 구현: 내부적으로 데이터를 우선순위에 따라 저장하고 관리합니다. 가장 높은 우선순위를 가진 요소가 먼저 나오는 특성을 가지고 있습니다.
  2. 힙을 기반으로 한 구현: PriorityQueue 클래스는 힙(heap)을 사용하여 구현됩니다. 이는 데이터를 삽입하고 삭제하는 과정에서 효율적인 작동을 가능하게 합니다.

따라서 queue.PriorityQueue 클래스는 힙큐와 동일한 개념이며, Python에서는 우선순위 큐를 사용할 때 일반적으로 이 클래스를 활용합니다.