[Python] 백준 2346 풍선 터뜨리기

    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을 이용해서 풀었다.

     

     

    댓글