Prepare > Python > Collections > Collections.deque()
Collections.deque() | HackerRank
Perform multiple operations on a double-ended queue or deque.
www.hackerrank.com
문제
Task
Perform append, pop, popleft and appendleft methods on an empty deque d.
Input Format
The first line contains an integer N, the number of operations.
The next N lines contains the space separated names of methods and their values.
Output Format
Print the space separated elements of deque d.
=> d라는 deque에 N개의 명령을 input할테니까 그대로 실행한 다음 출력해라.
코드
from collections import deque
N = int(input())
d = deque()
for i in range(N):
order = input().split()
if order[0] == 'append':
d.append(order[-1])
elif order[0] == 'pop':
d.pop()
elif order[0] == 'popleft':
d.popleft()
elif order[0] == 'appendleft':
d.appendleft(order[-1])
print(' '.join(d))
노트
queue 큐
- 직역하자면 대기열
- 데이터의 기본적인 자료 구조
- 먼저 넣은 데이터가 먼저 나오는 FIFO구조
- 왼쪽에서는 넣기만, 오른쪽에서는 나가기만 하는 구조
- 나중에 넣은 데이터가 먼저 나오는(LIFO) 스택과 반대의 개념
deque
- 큐 와 스택의 성질을 둘 다 가지고 있는 자료구조
from collections import deque # 불러오기
d = deque() # 빈 deque만들기
d.append(1) # 오른쪽에 요소 추가
print(d)
# deque([1])
d.appendleft(2) # 왼쪽에 요소 추가
print(d)
# deque([2, 1])
d.clear() # 모두 비우기
print(d)
# deque([])
d.extend('1') # 오른쪽으로 요소 확장. 숫자형 못 받음.
print(d)
# deque(['1'])
d.extendleft('234') # 왼쪽으로 요소 확장. 순서 주의. 문자가 분리되어 각 요소로 들어감
print(d)
# deque(['4', '3', '2', '1'])
d.count('1') # 요소가 몇 개 있는지
# 1
d.pop() # 오른쪽에서 요소 삭제 & 리턴. 없으면 error
# '1'
print(d)
# deque(['4', '3', '2'])
d.popleft() # 왼쪽에서 요소 삭제 & 리턴. 없으면 error
# '4'
print(d)
# deque(['3', '2'])
d.extend('7896') # 오른쪽으로 요소 확장
print(d)
# deque(['3', '2', '7', '8', '9', '6'])
d.remove('2') # 개별 요소 삭제. 왼쪽에서 한 개만
print(d)
# deque(['3', '7', '8', '9', '6'])
d.reverse() # deque를 역순으로
print(d)
# deque(['6', '9', '8', '7', '3'])
d.rotate(3) # 오른쪽으로 3칸 회전. 제일 오른쪽 요소가 제일 왼쪽에 붙음. 음수를 넘기면 왼쪽 회전
print(d)
# deque(['8', '7', '3', '6', '9'])
- index(x, start=n, stop=m): n번 인덱스 ~ m번 인덱스 직전의 범위에서 x를 탐색
d = deque()
d.extend('123456789')
print(d.index('4',3, 5)) # '4'를 인덱스 3~4(5직전)사이 범위에서 찾고 그 인덱스를 리턴
# 3
- append VS extend
한 요소로 취급하는지, 분리하는지
d = deque()
d.extend('123456789')
print(d)
# deque(['1', '2', '3', '4', '5', '6', '7', '8', '9'])
d = d = deque()
d.append('123456789')
print(d)
# deque(['123456789'])
- insert(x, n): x번 인덱스에 n 삽입
d = deque()
d.extend('123456789')
d.insert(2,3) # 2번 인덱스에 3 삽입
print(d)
# deque(['1', '2', 3, '3', '4', '5', '6', '7', '8', '9'])
두 번째 시도
from collections import deque
N = int(input())
d = deque()
for i in range(N):
order = input().split()
command = order[0]
value = order[-1]
if command == 'append':
d.append(value)
elif command == 'appendleft':
d.appendleft(value)
elif command == 'clear':
d.clear()
elif command == 'extend':
d.extend(value)
elif command == 'extendleft':
d.extendleft(value)
elif command == 'count':
d.count(value)
elif command == 'pop':
d.pop()
elif command == 'popleft':
d.popleft()
elif command == 'remove':
d.remove(value)
elif command == 'reverse':
d.reverse()
elif command == 'rotate':
d.rotate(int(value))
print(*d)
- join 대신 언패킹 사용
참조
[파이썬] deque
파이썬을 이용해서 BFS를 풀면 주로 사용하게 되는 자료구조가 Deque다. 사용하기야 자주 사용하지만 생각보다 deque을 잘 모르고 사용한다는 생각이 들어서 정리를 하기로 했다.큐의 앞, 뒤에서 삽
velog.io
[파이썬 기초] 스택과 큐의 기능을 한번에 deque
deque는 스택과 큐의 기능을 모두 가진 객체로 출입구를 양쪽에 가지고 있다. 스택처럼써도 되고, 큐처럼 써도 된다. 여러가지 메서드를 이용해서 이런 기능을 구현한다. 먼저 deque를 만들어보자 >
dongdongfather.tistory.com