백준 배열 돌리기1 문제가 복잡해보여 회피하다가 (^^) 오늘 풀었다. (풀이과정)
푸는 과정에서 값을 array에 넣고 회전 수만큼 첫 번째 원소를 빼고 새로 append 하려 했으나, deque
에 rotate
가 있다는 것을 알게되었다.
rotate에 대해 공부하면서 deque에 어떤 메소드들이 있는지 한 번 확인해보자.
collections.deque([iterable[, maxlen]])
deque
는 파이썬 모듈 collections
의 객체이다.
double-ended queue
약자이며, 스택과 큐를 일반화한 것이다.
- deque는 양쪽 끝에서 추가(append)와 팝(pop)을 O(1) 성능으로 지원한다.
- list 객체도 유사한 연산을 지원하지만, pop(0), insert(0, v) 연산에 대해 O(n) 메모리 이동 비용이 발생한다.
deque의 메서드
추가/삭제
append(x)
appendleft(x)
extend(iterable)
- iterable 인자에서 온 요소를 추가하여 deque의 오른쪽을 확장한다.
extendleft(iterable)
- iterable에서 온 요소를 추가하여 deque의 왼쪽을 확장한다.
- 왼쪽 추가는 iterable 인자에 있는 요소의 순서를 뒤집는 결과를 준다.
insert(i, x)
- x를 deque의 i 위치에 삽입산다.
- 삽입으로 인해 제한된 길이의 데크가 maxlen 이상으로 커지면, IndexError 발생
pop()
- deque의 오른쪽에서 요소를 제거하고 반환한다.
- 요소가 없으면, IndexError를 발생시킨다.
popleft()
- deque의 왼쪽에서 요소를 제거하고 반환한다.
- 요소가 없으면, IndexError를 발생시킨다.
remove(value)
- value의 첫 번째 항목을 제거한다.
- 찾을 수 없을 경우, ValueError를 발생시킨다.
clear()
- deque에서 모든 요소를 제거하고 길이가 0인 상태로 만든다.
그 외
copy()
count(x)
index(x[, start[, stop]])
- 데크에 있는 x의 위치를 반환한다. (인덱스 start 또는 그 이후, 그리고 인덱스 stop 이전)
- 첫 번째 일치를 반환하거나, 찾을 수 없으면 valueError를 발생시킨다.
reverse()
- deque의 요소들을 제자리에서 순서를 뒤집고 None을 반환한다.
rotate(n=1)
- deque를 n단계 오른쪽으로 회전한다. n이 음수이면, 왼쪽으로 회전한다.
- deque가 비어 있지 않을 때, 오른쪽으로 한 단계 회전하는 것은 appendleft(d.pop())과 동등하고, 왼쪽으로 한 단계 회전하는 것은 append(d.popleft())와 동등하다.
maxlen
- deque의 최대 크기 또는 제한이 없으면 None
참고