2023. 9. 21. 14:20ㆍAlgorithm
😳 스택 (Stack), 큐 (Queue), Deque 개념 살펴보기
- 스택 (Stack) : LIFO(후입선출), "나중에 들어온게먼저 나가는" 자료 구조이다. -> 파이썬에서는 리스트로 사용 가능!
- 큐 (Queue) : FIFO(선입선출), "먼저 들어온게 먼저 나가는" 자료 구조이다. -> 파이썬에서는 deque를 사용한다.
- Deque : double-ended Queue의 줄임말로, "양방향"에서 데이터를 처리할 수 있게 해주는 자료구조다. (스택과 큐의 기능이 모두 들어있다고 생각하면 됨!)
스택부터 파이썬 코드로 실전에서는 어떻게 활용할 수 있는지 살펴보자.
스택(Stack)은 위에서도 말했지만, 그냥 파이썬의 기본 자료형인 리스트(List)를 사용하면 된다.
# 스택 (Stack)
# 파이썬의 기본 자료형인 리스트(List)를 사용한다.
stack = [1, 2, 3]
# 원소 추가하기
stack.append(4)
print(stack) # [1, 2, 3, 4]
# 원소 제거하기
rm = stack.pop()
print(rm) # 4
print(stack) # [1, 2, 3]
반면, 큐(Queue)의 경우에는 collections라는 모듈에서 제공하는 deque 클래스를 활용해서 구현할 수 있다.
왼쪽으로 입력하고 오른쪽으로 제거되는 appendleft()와 pop()을 함께 사용하는 방식 하나, 오른쪽으로 입력하고 왼쪽으로 제거되는 append()와 popleft()를 함께 사용하는 방식 하나가 존재하니 편하게 사용하면 되겠다.
# 큐 (Queue)
# 파이썬의 collections 모듈에서 제공하는 deque 클래스를 활용한다.
from collections import deque
queue = deque([1, 2, 3])
# 큐 구현 (1) -> appendleft()와 pop()의 조합
queue.appendleft(4)
print(queue) # [4, 1, 2, 3]
rm = queue.pop()
print(rm) # 3
print(queue) # [4, 1, 2]
# 큐 구현 (2) -> append()와 popleft()의 조합
queue.append(4)
print(queue) # [1, 2, 3, 4]
rm = queue.popleft()
print(rm) # 1
print(queue) # [2, 3, 4]
아. 물론 위의 코드를 봐서 알겠지만,
스택(Stack)을 리스트(List)가 아니라 deque 클래스를 이용해서 구현해 줘도 상관없다. deque에는 스택과 큐의 기능이 모두 들어있다.
또한, deque 클래스에서는 리스트에서 사용했던 함수들(insert, remove, reverse 등)을 모두 사용가능하다는 점도 같이 알아두자.
📎 프로그래머스 문제 링크
🤔 문제설명, 제한사항, 입출력 예
각 원소가 0부터 9까지로 이루어져 있는 배열에서 연속적으로 나타나는 숫자를 제거하고 남은 수들의 배열을 반환하라는 문제이다.
단, 연속적으로 나타나는 숫자를 제거 후 남은 수들의 배열을 반환할 때는 처음 배열의 순서를 유지해야 한다.
🤔 내가 생각한 풀이 과정
arr 배열의 요소들을 반복하면서 앞 요소와 현재 반복하는 요소가 같은지를 계속 비교하면 될 것이라 생각했다.
조금 더 자세하게는 처음 앞 요소(0 인덱스의 값)은 내가 지정을 해주고, 반복은 1 인덱스부터 시작해 앞 요소(0 인덱스의 값)와 같은지를 반복해서 비교해 줄 거다.
만약, 앞 요소와 현재 반복 요소가 다른 경우에는 현재 반복 요소를 새로운 반환 리스트에 추가해 주면 되고, 앞 요소를 새로 업데이트해주면 된다. (같은 경우에는 "연속적으로 나타나는 숫자"라고 판단: 새로운 요소를 추가하지 않고 계속 반복을 돌리면 되겠다.)
🧑🏻💻 코드로 확인하기
def solution(arr):
answer = [arr[0]]
before = arr[0]
for i in arr[1:]:
if i != before:
answer.append(i)
before = i
return answer
'Algorithm' 카테고리의 다른 글
[Programmers, Lv.3] 코딩테스트 고득점 Kit - 그래프 (1), 기본 개념, BFS/DFS + 가장 먼 노드 (Python) (1) | 2023.09.24 |
---|---|
[Programmers, Lv.2] 코딩테스트 고득점 Kit - 스택/큐 (2) (Python) (0) | 2023.09.22 |
[Programmers, Lv.2] 코딩테스트 고득점 Kit - 힙(Heap) (1), 더 맵게 (Python) (1) | 2023.09.16 |
[Programmers, Lv.3] 코딩테스트 고득점 Kit - 해시 (3) (Python) (0) | 2023.09.13 |
[Programmers, Lv.2] 코딩테스트 고득점 Kit - 해시 (2) (Python) (0) | 2023.09.12 |