동캄의 코딩도장

백준 2346 [풍선 터뜨리기] 파이썬 본문

코테/BOJ

백준 2346 [풍선 터뜨리기] 파이썬

동 캄 2025. 8. 21. 22:08
반응형

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

 

# 백준 2346 풍선 터뜨리기
import sys
from collections import deque
input = sys.stdin.readline

N = int(input())                # 풍선 개수
ord = list(map(int, input().split()))  # 풍선 안의 종이에 적힌 이동 수
ord = [0] + ord                 # 1번 인덱스부터 사용하기 위해 0번째에 더미 0 추가

arr = [i for i in range(1, N+1)]  # 풍선 번호 리스트
deq = deque(arr)                   # 풍선 번호를 deque로 관리
ans = []                            # 터뜨린 순서를 저장할 리스트

curr = deq.popleft()  # 첫 번째 풍선 터뜨리기
ans.append(curr)      # 터뜨린 풍선 번호 기록

# 풍선이 남아 있는 동안 반복
while deq:
    move = ord[curr]  # 현재 터뜨린 풍선 종이의 숫자 (이동 횟수)
    
    if move > 0:
        move -= 1        # 현재 터뜨린 풍선 제외하고 이동 시작
        while move > 0:
            # 왼쪽에서 오른쪽으로 pop 후 append → 오른쪽으로 이동
            deq.append(deq.popleft())
            move -= 1
    else:
        move = abs(move)
        while move > 0:
            # 오른쪽에서 왼쪽으로 pop 후 appendleft → 왼쪽으로 이동
            deq.appendleft(deq.pop())
            move -= 1
    
    curr = deq.popleft()  # 다음 터뜨릴 풍선 선택
    ans.append(curr)      # 터뜨린 순서 기록

print(*ans)  # 결과 출력: 풍선이 터진 순서

 

덱을 이용하여 해결하는 문제이다.

반응형