Seongwon Lim

[Python] deque를 이용하여 리스트 회전하기 본문

Python

[Python] deque를 이용하여 리스트 회전하기

limsw 2022. 11. 2. 21:29
반응형

서론

이번 글에서는 파이썬의 collections 라이브러리에 있는 deque를 이용하여 리스트를 회전하는 방법을 간단하게 알아보고자 한다.

알고리즘 문제를 풀다보면 배열을 회전시켜야 하는 문제들을 종종 볼 수 있는데 deque를 사용하면 간단하게 구현할 수 있다.

deque란 무엇인가?

먼저 deque는 양쪽 끝에서 삽입과 삭제를 할 수 있는 리스트 종류의 컨테이너이다.

파이썬에서 리스트를 생성하면 삽입과 삭제가 오른쪽 맨 끝에서 이루어지는 반면에 deque는 맨 앞에도 데이터를 삽입, 삭제할 수 있다는 장점이 있다.

deque 사용 방법

먼저 배열 회전을 구현하기 전에 간단하게 deque 자료형 사용 방법을 알아보자.

from collections import deque
nums = [1, 2, 3, 4, 5, 6]

queue = deque(nums)

front = queue.popleft()
queue.append(front)

print(queue) # deque([2, 3, 4, 5, 6, 1])

위 예제는 배열을 deque 자료형으로 바꾼 뒤 맨 앞의 요소를 꺼내어 맨 뒤에 추가한 것이다.

 

만약 맨 뒤에서 요소를 꺼낸 뒤 맨 앞에 추가하고 싶다면 다음과 같이 코드를 작성할 수 있다.

from collections import deque
nums = [1, 2, 3, 4, 5, 6]

queue = deque(nums)

end = queue.pop()
queue.appendleft(end)

print(queue) # deque([6, 1, 2, 3, 4, 5])

이제 deque를 이용해서 리스트를 회전하는 방법을 알아보자.

rotate() 메서드를 이용하여 리스트 회전하기

rotate() 메서드는 deque에서 지원하는 배열 회전 메서드이다. 괄호 안에 양수를 넣으면 오른쪽으로 회전하며 음수를 넣으면 왼쪽으로 회전한다. 예제를 통해 살펴보자.

from collections import deque
nums = [1, 2, 3, 4, 5, 6]

queue = deque(nums)

queue.rotate(-1) # 왼쪽으로 1회 회전하기
print(queue) # deque([2, 3, 4, 5, 6, 1])

왼쪽으로 한 칸씩 밀리기 때문에 맨 앞에 있던 1이 맨 뒤로 이동한 것을 확인할 수 있다.

 

이번에는 양수를 넣어서 데이터가 오른쪽으로 잘 회전하는지 살펴보자.

from collections import deque
nums = [1, 2, 3, 4, 5, 6]

queue = deque(nums)

queue.rotate(3) # 오른쪽으로 3회 회전하기
print(queue) # deque([4, 5, 6, 1, 2, 3])

예상했던 대로 배열이 오른쪽으로 세 번 밀린 것을 확인할 수 있다.

 

만약에 rotate() 메서드를 이용하지 않는다면 다음과 같이도 코드를 구현할 수 있다.

from collections import deque
nums = [1, 2, 3, 4, 5, 6]

queue = deque(nums)

# 오른쪽으로 3회 회전하기
for _ in range(3):
    end = queue.pop()
    queue.appendleft(end)

print(queue) # deque([4, 5, 6, 1, 2, 3])

출력을 했을 때 반환형이 deque 자료형이기 때문에 리스트로 다시 반환하기 위해서는 list()로 감싸주면 된다.

from collections import deque
nums = [1, 2, 3, 4, 5, 6]

queue = deque(nums)

print(list(queue)) # [1, 2, 3, 4, 5, 6]

 

Comments