https://www.acmicpc.net/problem/2346

예전에 풀었던 요세푸스 문제와 비슷한 것 같다.
예제 입력 1을 보면

이렇게 풍선이 존재하고 제일 처음 1번 풍선부터 터트리면 안에 있는 숫자가 양수라면 그 숫자만큼 시계방향으로 이동해 해당 풍선을 터트리고 또 이동하는 것을 반복한다.

3만큼 시계방향 이동 후 4를 터뜨린다.

이미 터진 풍선 1을 건너뛰고 3만큼 반시계 방향으로 이동해 5를 터뜨린다.

이미 터진 풍선 4를 건너 뛰고 반시계 방향으로 이동해 3을 터뜨린다.
그리고 마지막 2를 터뜨리게 되며
터진 순서인 결과는 1 4 5 3 2 가 출력된다.
enumerate 는 '낱낱이 세다' 라는 뜻을 가지고 있다.
enumerate는 리스트와 같은 반복 가능한(iterable) 객체를 입력 받아, 각 요소를 인덱스와 함께 튜플로 묶어서 반환하는 함수이다.
이를 통해 for 문 등에서 요소의 인덱스와 값을 동시에 사용할 수 있게 됩니다.
enumerate()와 친해지기 위해 코드를 만져보았다.
a = ["a", "b", "c"]
a = enumerate(a)
print(a)
[(1,a),(2,b),(3,c)] 뭐 이런식의 반환을 예상했지만 결과는
<enumerate object at 0x102d0d1c0> 이런 enumerate 객체를 반환했다.
enumerate 함수는 직접 튜플의 리스트로 반환하지 않고, 대신에 enumerate 객체를 반환합니다.
이 객체는 반복 가능(iterable)하며, 반복할 때마다 튜플을 생성하여 반환합니다. 이 튜플들은 각 요소의 인덱스와 값을 포함하고 있습니다.
실제 튜플로 된 내용을 보고 싶다면, 이 enumerate 객체를 리스트로 변환하면 됩니다.
라고 한다.
a = ["a", "b", "c"]
a = list(enumerate(a))
print(a)
이렇게 enumerate 객체를 list로 변환시켜주었더니
[(0, 'a'), (1, 'b'), (2, 'c')]
이런식으로 index가 0으로 시작하며 튜플로 감싸진 리스트로 잘 나왔다.
enumerate() 함수 유용하다고 하니 다음에도 잘 활용해보자
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
deq = deque(enumerate(map(int, input().split()))) // 풍선의 index(0부터) 와 안에 숫자를 enumerate함수로 튜플화해주어 다시 deque에 저장한 모습
answer = []
while deq:
idx, now_turn = deq.popleft()
answer.append(idx + 1) // enumerate해준 index가 0으로 시작하기에 1을 더해준 모습
if now_turn > 0:
deq.rotate(-(now_turn - 1)) // now_turn이 회전할 양인데 양수의 경우 왼쪽으로 돌아야 하므로 -를 붙여준 모습
elif now_turn < 0:
deq.rotate(-now_turn) // 음수의 경우 오른쪽으로 돌아야하기에 -를 붙여준 모습
print(' '.join(map(str, answer)))