"""
- 자료구조 덱 사용
* 문제 정리
- 출력값 : 터진 풍선의 번호 나열
- 1번 풍선 터짐 -> 해당 값만큼 이동 -> 풍선 터지고 이동...
- 값이 양수면 오른쪽으로 음수이면 왼쪽으로 이동. 이미 터진 풍선은 제외.
* 개념 정리
- enumerate : 순서가 있는 자료형을 받았을때 인덱스와 값을 포함해 리턴
- deque.rotate() : 원형 큐를 회전. 음수는 반시계로 회전, 양수는 시계방향으로 회전.
"""
from collections import deque
n = int(input())
balloons = deque(enumerate(map(int, input().split())))
order = []
while balloons:
idx, paper = balloons.popleft() # 맨 앞의 요소를 제거 + 인덱스와 이동숫자 가져옴
order.append(idx + 1) # 출력할 리스트에 번호(인덱스 + 1)추가
if paper > 0: # 만약 종이의 값이 양수라면
balloons.rotate(-(paper - 1)) # 이미 1개 요소가 사라졌으니 -1 해주고 왼쪽으로 당김 = 오른쪽으로 이동
elif paper < 0: # 음수라면 오른쪽으로 당김. 회전방향이 달라서 이동 요소 개수에 변화 없음. = 왼쪽으로 이동
balloons.rotate(-paper)
print(' '.join(map(str, order)))
https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
'study > Algorithm' 카테고리의 다른 글
[백준] 파이썬 17298번: 오큰수 (0) | 2024.04.04 |
---|---|
[백준] 파이썬 2493번: 탑 (0) | 2024.04.04 |
[백준] 파이썬 1966번: 프린터 큐 (0) | 2024.04.04 |
[백준] 파이썬 9012번: 괄호 (1) | 2024.04.04 |
[백준] 파이썬 3107 : IPv6 (0) | 2024.04.02 |