Arrays
in Notes / Codingtest / Datastructures
Queue, Stack,
Queue
- 줄 서는 행위와 비슷하다
| 시간 복잡도 | ||
|---|---|---|
| 검색, 수정 | O(n) | |
| 삽입, 삭제 | O(1) |
| 공간 복잡도 | ||
|---|---|---|
| 모든 작업 | O(1) |
- FIFO : First in, First Out
- Enqueue : 데이터 넣기
Dequeue : 데이터 빼기
- 구현 & 파이썬 제공 라이브러리
코드
class myQueue():
def __init__(self) -> None:
self.q = []
def enqueue(self, a):
self.q.append(a)
def dequeue(self):
self.delData = self.q[0]
del self.q[0]
return self.delData
def size(self):
return len(self.q)
def print(self):
for i in self.q:
print(i, end=" ")
print()
1) Queue()
import queue #put(a), get(), qsize()
q = queue.Queue()
q.put("TEST") #enqueue "TEST"
q.put(1) #enqueue 1
q.qsize() #size = 2
q.get() #dequeue and returns "TEST" (First in First Out)
2) LifoQueue()
import queue
q = queue.LifoQueue() #STACK의 기능을 한다
q.put("TEST")
q.put(1)
q.qsize() # = 2
q.get() # deletes and returns 1
3) PriorityQueue()
- 우선순위 큐 (데이터 입력 순서대로 get하는 것이 아닌, 초기에 설정된 우선순위로 get한다)
import queue
q = q.PriorityQueue()
q.put((10, "TEST")) #put ( 우선순위, 데이터 )
q.put((5, "CODING"))
q.put((7, 1))
q.get() # (5, "CODING")이 먼저 나온다
- 추천 문제
- BOJ 큐 연습하기 < TO BE ADDED LATER… >
Two Pointer Algorithm
- reduces time complexity (한번만 탐색)
- sorted: \(O(n)\), unsorted: \(O(nlogn)\)
--- --- --- --- --- --- --- --- --- | 1 | 5 | 2 | 8 | 6 | 3 | 4 | 9 | 0 | --- --- --- --- --- --- --- --- --- ↑ ↑ startPtr endPtr - variants:
- Opposite Directional: 반대편에서 시작해 만날때까지 or 조건만족할때까지 좁혀짐
- Equi-Directional: 동시 시작, slow-runner & fast-runner
- 연습문제:
- 연속된 부분 수열의 합 (프로그래머스, LV2), 답