알고리즘💻/스택&큐&덱

BOJ 2347번: 풍선 터뜨리기

호프 2021. 7. 12. 20:24

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

 

2346번: 풍선 터뜨리기

첫째 줄에 자연수 N(1≤N≤1,000)이 주어진다. 다음 줄에는 차례로 각 풍선 안의 종이에 적혀 있는 수가 주어진다. 편의상 0은 적혀있지 않다고 가정하자.

www.acmicpc.net

원형 큐를 양방향 큐인 deque 즉, double-ended-queue로 생각하여 풀었다.

양수인 경우에는 popleft()를 하고 그걸 다시 append() 하고

음수인 경우에는 pop()을 하고 그걸 다시 appendleft() 하였다.

 

import sys
from collections import deque

N = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))

q = []
for i in range(1,N+1):
    q.append(i)
q = deque(q)

cur = q.popleft()
print(cur, end=" ")

while (q):
    m = 0
    if (num[cur-1]>0):
        m+=1
        while(m < num[cur-1]):
            m+=1
            q.append(q.popleft())
        cur = q.popleft()
        print(cur, end=" ")
    elif (num[cur-1]<0):
        m-=1
        while (m > num[cur-1]):
            m-=1
            q.appendleft(q.pop())
        cur = q.pop()
        print(cur, end=" ")
댓글수0