https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
from collections import deque
n = int(input())
lst = list(map(int, input().split()))
queue = deque((i+1, lst[i]) for i in range(len(lst))) # (index, value)
result = []
while queue:
num = queue.popleft()
result.append(num[0])
if len(queue) == 0:
break
# 만약 뽑은 숫자가 양수이면
if num[1] > 0:
for i in range(num[1]-1):
queue.append(queue.popleft())
# 뽑은 숫자가 음수이면
else:
for i in range(abs(num[1])):
queue.appendleft(queue.pop())
print(*result)
- 뽑은 숫자가 양수라면 왼쪽에서 pop해서 오른쪽에 붙여주기
- 뽑은 숫자가 음수라면 오른쪽부터 pop해서 왼쪽에 붙여주기
다른 블로그를 찾아보니 rotate를 이용한 방법도 있으나, 해당 함수를 몰랐어서 단순히 덱의 append, pop을 이용해서 풀었다.
댓글