문제
https://www.acmicpc.net/problem/2346
코드
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
q = deque(enumerate(map(int, input().split())))
ans = []
cnt=0
while q:
if cnt>=0:
idx,paper=q.popleft()
else:
idx,paper=q.pop()
ans.append(idx+1)
if len(q)==0:
break
cnt=0
if abs(paper)-1 ==0:
if paper>0:
cnt+=1
else:
cnt-=1
else:
for i in range(abs(paper)-1):
if paper>0:
q.append(q[0])
q.popleft()
cnt+=1
elif paper<0:
q.appendleft(q[-1])
q.pop()
cnt-=1
print(' '.join(map(str, ans)))
설명
처음에는 arr이라는 리스트를 만들어서 [1,2,3,4,5]로 덱이랑 연결을 해주려고 생각했으나, enumerate를 사용하는것이 더 간편하다고 판단하여 enumerate를 사용하였다.
ans는 새로 넣어줄 리스트이다.
+일때는 cnt를 더해서 양수로 만들어주고
-일때는 cnt를 빼서 음수로 만들어줘서
오른쪽으로 이동할지, 왼쪽이로 이동할지를 정해주었다.
풍선의 절댓값이 1일경우는 이동하지 않고 왼쪽, 오른쪽만 정해야 하므로 조건식을 사용하여 정해주었다.
rotate라는 기능을 사용하는것이 훨씬 수월하긴 하나, 이 기능없이 구현해보고싶었다.
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)))
'Koala - 11기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 3190번 : 뱀 (0) | 2023.08.13 |
---|---|
[C++] 백준 12789번: 도키도키 간식드리미 (1) | 2023.08.13 |
[백준/Java] 17298 오큰수 (0) | 2023.08.13 |
[백준/C++] 11866번: 요세푸스 문제 0 (0) | 2023.08.12 |
[백준 / Python] 26042 식당 입구 대기 줄 (0) | 2023.08.11 |