[백준(python)] 2346 풍선 터뜨리기

구준희·2023년 10월 31일
0

알고리즘

목록 보기
19/31
post-thumbnail

📌 난이도, 유형

난이도 : 실버3
유형 : 자료구조, 덱(deque)
시간제한 : 2초
메모리제한 : 4MB


📌 문제설명


📌 입출력 예


📄 코드

from collections import deque

a = int(input())
arr = list(map(int, input().split()))
deq = deque((idx+1, value) for idx, value in enumerate(arr))
result = []

# 제일 처음에 움직이는 방향
move = deq[0][1]
result.append(deq.popleft())

while deq:
    # move가 양수일 때
    if move>0:
        for i in range(move-1):
            deq.append(deq.popleft())
        move = deq[0][1]
        result.append(deq.popleft())
    
    # move가 음수일 떄
    else:
        for i in range(abs(move)-1):
            deq.appendleft(deq.pop())
        move = deq[-1][1]
        result.append(deq.pop())
        
for idx, value in result:
    print(idx, end=" ")

📝 해설

덱을 만들 때 터진 풍선의 번호를 나열해야 하기 때문에 {index, value}값으로 묶어서 리스트에 넣어주었다.
그리고 문제에서 '제일 처음에는 1번 풍선을 터뜨린다'라는 말이 있었기 때문에 제일 처음 풍선은 while문을 돌리기 전에 미리 result에 넣어준다.

반복문은 deque에 아무것도 들어있지 않게 되면 종료된다.

선택된 값이 사라지게 되면 옆에 값이 1번이 되기 때문에 move에 -1을 해주었다.

사실 rotate를 사용하면 더 쉽고 빠르게 풀 수 있었는데 다 하고나서 알았다..

profile
꾸준히합니다.

0개의 댓글