Hippo's data
스택(Stack), 큐(Queue), 덱(Deque) 본문
오늘의 포스팅은 자료구조인 스택, 큐, 덱입니다!!
특히 차례대로 쌓이는 작업을 어떤 순서대로 처리할지 나타내는 자료구조들 입니다
알고리즘 문제를 풀 때 막무가내로 풀다가 시간초과가 나는 경우가 빈번한데요
특정 상황에서 위 자료구조를 사용하면 시간단축을 확실히 할 수 있습니다!!
# 스택(Stack)
- 한쪽에서만 넣고 뺄 수 있음
LIFO(last-in,first-out) = 후입 선출
책이 점점 쌓임 - 마지막에 쌓은 책을 제일먼저 꺼내는 것
예) 웹 브라우저 방문이력 확인 / 텍스트 에디터 되돌리기 기능
->파이썬에서는 list 자료형으로 구현
stack = [1,2,3] 선언
<스택 연산> -> 시간복잡도 O(1)
stack.append() 자료 넣기
stack.pop() 자료 빼기
-> stack.pop(i) - 특정 인덱스 번호 제거시 시간복잡도 증가( O(1)-> O(n) )
stack[-1] 가장 최근 자료(위에 있는 자료) 확인
len(stack) == 0 비어있는지 확인
len(stack) 자료 개수 확인
관련문제
스택 : https://www.acmicpc.net/problem/10828
# 큐(Queue), 덱(Deque)
- 큐: 한쪽에서만 자료 넣고 다른쪽에서만 뺄 수 있음
FIFO(first-in, first-out) = 선입 선출
음식점 줄서기 - 먼저 줄선사람 먼저 음식 먹음
예) 항공권 예약 대기표처리, 인쇄기 작업 스케쥴링 등
- 덱: 양쪽에서 자료 넣고 뺄 수 있음
-> 파이썬에서는 queue라는 라이브러리가 존재하지만 collections 라이브러리의 deque 모듈로 모두 구현가능
from collections import deque
queue = deque ([1,2,3]) 과 같이 선언
<큐, 덱 연산> -> 시간복잡도 O(1)
append( ) 원소를 뒤에 추가
appendleft( ) 원소를 앞에 추가
pop( ) 마지막 원소 제거
popleft( ) 첫번째 원소 제거
## 전문성을 살리기 위해 발음 조심하자
Deque -> 덱
dequeue -> 디큐
관련문제
요세푸스 문제 : https://www.acmicpc.net/problem/1158
'Algorithm' 카테고리의 다른 글
코린이의 백준 장학금 도전기 - 3주차 (3) | 2023.08.12 |
---|---|
유클리드 호제법 - 최대공약수GCD, 최소공배수LCM 구하기 (0) | 2023.08.08 |
코린이의 백준 장학금 도전기 - 2주차 (0) | 2023.08.05 |
코린이의 백준 장학금 도전기 스따뜨 - 1주차 (1) | 2023.07.30 |
시간 복잡도(Time Complexity)와 빅오(Big O) 표기법에 대해 알아보쟈! (0) | 2023.07.29 |