[백준] 2346 풍선터뜨리기

cheeeese·2022년 4월 26일
0

코딩테스트 연습

목록 보기
89/151
post-thumbnail

📖 문제

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

💻 내 코드

n=int(input())
mlist=list(map(int, input().split()))
indexs=[]
res=[]
for i in range(n):
    indexs.append(i+1)

idx=0
x=mlist.pop(idx)
res.append(indexs.pop(idx))

while mlist:
    if x<0:
        idx=(idx+x)%len(mlist)
    else:
        idx=(idx+(x-1))%len(mlist)

    x=mlist.pop(idx)
    res.append(indexs.pop(idx))

for i in res:
    print(i, end=" ")

💡 풀이 및 다른 코드

  • 아직 코드를 제대로 이해하지 못함
  • idx에 터트려야할 인덱스 저장
  • 터트리면 1부터 n까지 저장 된 리스트에서 현재 터진 위치와 같은 위치 pop해서 결과 리스트에 저장
  • 음수일 땐 그냥 더해서 %len(mlist)
  • 양수일 땐 이전에 pop한 값에서 -1한 다음에 idx와 더해서 %len(mlist)
  • 찾아본 다른 코드
from collections import deque
n=int(input())
queue=deque(enumerate(map(int, input().split())))
res=[]

while queue:
    idx, num=queue.popleft()
    res.append(idx+1)
    if num>0:
        queue.rotate(-(num-1))
    elif num<0:
        queue.rotate(-num)
print(' '.join(map(str, res)))
  • deque와 rotate사용
  • rotate를 사용하면 deque안에서 회전이 가능

0개의 댓글