파이썬 자료구조 순환 반복

백엔드&인프라 추종자·2025년 11월 18일

코딩테스트 공부

목록 보기
10/10

네, deque를 원형 큐처럼 사용할 때 순환(Iteration) 방식에 대해 정확히 설명해 드리겠습니다.

파이썬의 deque는 일반적인 리스트나 다른 시퀀스(Sequence)처럼 동작하며, 순환(Circular) 기능을 자동으로 제공하지는 않습니다.


1. deque의 일반적인 순환 (Iteration)

dequefor 반복문이나 iter()next() 함수를 사용해 순환할 때, 현재 큐에 있는 요소들을 왼쪽(Head)부터 오른쪽(Tail) 순서대로 한 번만 꺼내고 종료됩니다.

maxlen 옵션은 새로운 요소를 추가할 때 최대 크기를 관리하기 위한 것이지, 요소를 순회할 때 끝에서 다시 시작하게 만드는 기능은 아닙니다.

💡 deque 순환 예시

from collections import deque

# maxlen이 3인 deque (원형 큐 기능)
circular_queue = deque([10, 20, 30], maxlen=3)

print("--- for 반복문을 통한 순환 ---")
for item in circular_queue:
    print(item)

# 출력:
# 10
# 20
# 30

# 순환이 끝나면 자동으로 종료됩니다.

2. 순환(순회) 기능의 구현

만약 큐의 요소를 무한히 **순환 반복(Cycling)**하고 싶다면, 파이썬의 itertools 모듈을 사용하거나 수동으로 구현해야 합니다.

A. itertools.cycle 사용 (무한 순환)

itertools.cycle 함수는 주어진 이터러블 객체를 무한히 반복하게 해줍니다.

from collections import deque
import itertools

my_deque = deque(['A', 'B', 'C'])

# cycle()을 사용하여 무한 이터레이터를 생성
cycler = itertools.cycle(my_deque)

# next()를 사용하여 무한히 요소를 꺼냄
print(next(cycler))  # 출력: A
print(next(cycler))  # 출력: B
print(next(cycler))  # 출력: C
print(next(cycler))  # 출력: A (다시 처음으로 순환)
print(next(cycler))  # 출력: B

B. 수동으로 큐 순환 기능 구현

원형 큐의 특성을 이용하여, 맨 앞에서 꺼낸 요소를 다시 맨 뒤에 넣어 순환하는 것처럼 보이게 만들 수 있습니다. (이것은 큐 자체를 변형하는 방식입니다.)

from collections import deque

my_queue = deque(['A', 'B', 'C'])

print("--- 큐 요소 순환 및 위치 변경 ---")

for _ in range(5):  # 5번 반복
    # 1. 맨 앞에서 요소를 꺼내고 (제거)
    item = my_queue.popleft()
    
    # 2. 맨 뒤에 다시 삽입 (순환 효과)
    my_queue.append(item)
    
    print(f"꺼낸 요소: {item}, 현재 큐 상태: {list(my_queue)}")

# 출력:
# 꺼낸 요소: A, 현재 큐 상태: ['B', 'C', 'A']
# 꺼낸 요소: B, 현재 큐 상태: ['C', 'A', 'B']
# 꺼낸 요소: C, 현재 큐 상태: ['A', 'B', 'C']
# 꺼낸 요소: A, 현재 큐 상태: ['B', 'C', 'A']
# 꺼낸 요소: B, 현재 큐 상태: ['C', 'A', 'B']

결론: deque 자체는 일반 시퀀스처럼 한 번만 순환합니다. 무한 순환이 필요하다면 **itertools.cycle**을 사용하거나 수동으로 popleft()append()를 조합하여 구현해야 합니다.

profile
AI 답변 글을 주로 올립니다.

0개의 댓글