1. 문제

2346번: 풍선 터뜨리기



2. 개요

1 ~ N번까지의 풍선이 원형으로 놓여있다.

가장 먼저 1번 풍선을 터뜨린 후, 풍선에 쓰인 숫자만큼 이동하여 다음 풍선을 터뜨리는 작업을 반복한다. 양수일 경우 오른쪽, 음수일 경우 왼쪽으로 이동하며, 이미 터진 풍선은 제외한다.

이 때, 터지는 풍선의 번호를 순서대로 출력하는 문제.



3. 풀이 및 코드

3-1. 풀이

풍선의 번호, 풍선에 쓰여진 숫자를 원소로 하는 풍선 배열을 만든다.

이 배열의 첫 원소가 항상 다음에 터질 풍선이 되도록 풍선을 터뜨리고 배열을 회전시키는 작업을 반복한다. 풍선을 터뜨리면서 풍선의 번호를 정답 배열에 저장한다.

모든 풍선이 터진 뒤, 정답 배열을 출력한다.

3-2. Python

import sys
from collections import  deque

N = int(sys.stdin.readline())

ballons = deque(list(map(int, sys.stdin.readline().split())))

for i in range(N):
    ballons[i] = [ballons[i], i+1]

answer = []

while ballons:
    now = ballons.popleft()

    answer.append(now[1])

    if now[0] > 0:
        ballons.rotate(1 - now[0])

    elif now[0] < 0:
        ballons.rotate(-now[0])

print(*answer)

Comments