📍문제 링크
https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
📍알고리즘 분류
- 자료구조
- 덱
📍문제 풀이
- 1부터 N까지의 원형 리스트가 있고, 각 원소는 -N 부터 N 중 0을 제외한 정수를 값으로 갖는다
1부터 시작하여 각 정수만큼 왼쪽, 오른쪽으로 이동하며 터지는 풍선의 번호를 순서대로 출력한다
📍코드
from collections import deque
N = int(input())
# list로는 바로 생성 불가
d = deque(enumerate(map(int, input().split())))
answer = []
while d:
idx, move = d.popleft()
answer.append(idx + 1)
if move > 0:
d.rotate(1 - move) # popleft 하기 때문에 1회 덜 시행
elif move < 0:
d.rotate(-move)
print(" ".join(map(str, answer)))
참고
https://docs.python.org/ko/3/library/collections.html#collections.deque
collections — Container datatypes
Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.,,...
docs.python.org