-
[Python] deque 자료구조Code 2024. 6. 8. 13:21
덱(deque)는 스택(Stack)과 큐(Queue)의 기능을 모두 가지고 있는 자료 구조이다.
즉, 양 끝에서 삽입/삭제가 모두 가능한 자료구조로, 스택과 큐보다는 유연하고 링크드리스트보다는 덜 유연한 자료 구조라고 한다.
덱(deque)을 활용하기 위해서는, Collection 모듈이 필요하다. BFS를 구현하는 데 유용하게 활용할 수 있겠다.
Collections: list, tuple, set, dict 등 내당 컨테이너에 대한 대안을 제공하는 Python Built-In 확장 모듈
from collections import duque from collections import OrderedDict from collections import defaultdict from collections import Counter from collections import namedtuple
deque 주요 메소드
- append(x) : deque의 오른쪽 끝에 항목 x 추가
- appendleft(x) : deque의 왼쪽 끝에 항목 x 추가
- pop() : deque의 오른쪽 끝에서 항목을 제거하고 반환
- popleft() : deque의 왼쪽 끝에서 항목을 제거하고 반환
- extend(iterable) : iterable의 모든 항목을 deque의 오른쪽 끝에 추가
- extendleft(iterable) : iterable의 모든 항목을 deque의 왼쪽 끝에 추가
- rotate(n) : deque를 n번 만큼 회전. 양수면 오른쪽 방향, 음수면 왼쪽 방향으로 회전
- clear() : deque의 모든 항목을 제거
- count(x) : deque에서 x가 등장하는 횟수를 반환
- index(x[, start[, end]]) : deque에서 x가 처음 등장하는 위치를 반환. (start와 end 인덱스 선택적으로 지정 가능)
- remove(value) : deque에서 첫 번째로 등장하는 value를 제거. (value가 없으면 ValueError 발생)
- reverse() : deque의 항목들을 역순으로 정렬
예제
문제
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
해결
n, m, s = map(int, input().split()) li = [[] for _ in range(n + 1)] # 인접 리스트 생성 for _ in range(m): a, b = map(int, input().split()) li[a].append(b) li[b].append(a) # 각 리스트의 원소(정점)을 오름차순으로 정렬 for i in li: i.sort() # 방문 처리 리스트 생성 visit = [False] * (n + 1) stack = [s] dfs = [] bfs = [] # DFS 스택 생성 while stack: node = stack.pop() # 방문 노드 처리 if not visit[node]: visit[node] = True # 해당 노드에 연결된 노드의 리스트를 역순으로 순회하며 스택에 쌓음 # 스택처리 시 큰 노드를 먼저 쌓고 작은 노드를 먼저 꺼내기 위함 for i in reversed(li[node]): stack.append(i) dfs.append(node) from collections import deque # deque 자료구조 처리를 위해 import visit = [False] * (n + 1) Q = deque([s]) # BFS 큐 생성(deque 사용) while Q: node = Q.popleft() # 방문 노드 처리(큐로 처리하기 위해 왼쪽에서부터 꺼냄) if not visit[node]: visit[node] = True for i in (li[node]): Q.append(i) bfs.append(node) for i in dfs: print(i, end = ' ') print() for i in bfs: print(i, end = ' ')
BFS 처리를 위한 큐를 생성하는 과정에서 deque를 활용하였다.
'Code' 카테고리의 다른 글
[Java] 공공데이터포털 Open API 파싱, JPA (0) 2024.08.08 [Java] 자주 사용되는 Lombok 어노테이션 (0) 2024.06.22 [Python] cannot unpack non-iterable NoneType object 오류 (0) 2024.06.07 [Python] DFS (0) 2024.06.07 [VS Code] fatal: Need to specify how to reconcile divergent branches. (1) 2024.04.03