목차
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
dq=deque()
n=int(input())
arr=list(map(int,input().split()))
for idx,val in enumerate(arr):
dq.append([idx+1,val])
x=dq.popleft()[1]
res=[1]
while dq:
if x>0:
for _ in range(x-1):
if dq:
dq.append(dq.popleft())
if dq:
xx,yy=dq.popleft()
x=yy
res.append(xx)
if x<0:
for _ in range(-1-x):
if dq:
dq.appendleft(dq.pop())
if dq:
xx,yy=dq.pop()
x=yy
res.append(xx)
for x in res:
print(x,end=' ')
큐를 사용해서 구현하긴 했지만 테스트 케이스를 제외한 다른 입력값에서 런타임 에러가 나왔다.
반례를 찾을 수 없어 우선 큐가 있을 때만 로직을 수행하게 해서 정답 판정을 받긴했지만 너무 않좋은 코드 같다..!
다른 좋은 코드
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
q = deque(enumerate(map(int, input().split())))
ans = []
while q:
idx, paper = q.popleft()
ans.append(idx + 1)
if paper > 0:
q.rotate(-(paper - 1))
elif paper < 0:
q.rotate(-paper)
print(' '.join(map(str, ans)))
pop을 하면 가리키는 곳은 시계방향의 다음 원소가 된다.
참조
'코딩테스트[파이썬] > 백준 (BOJ)' 카테고리의 다른 글
백준 2092 - 딕셔너리 정렬 (0) | 2024.02.18 |
---|---|
백준 1010 - 다리놓기[조합] (0) | 2024.02.17 |
백준 12789 - 도키도키 간식드리미 (0) | 2024.02.16 |
백준 17103 - 짝[소수약수배수] (0) | 2024.02.16 |
백준 1934 - 최소공배수[유클리드 호제법] (2) | 2024.02.16 |