백준 2346. 파이썬 데크 문제풀이

2023. 8. 9. 10:08코딩테스트

반응형
from collections import deque

n = int(input())
numbers = list(map(int, input().split()))

balloons = deque([(i+1, numbers[i]) for i in range(n)])
result = []

while balloons:
    index, value = balloons.popleft()
    result.append(index)
    if not balloons:
        break

    if value > 0:
        for _ in range(value - 1):
            balloons.append(balloons.popleft())
    else:
        for _ in range(abs(value)):
            balloons.appendleft(balloons.pop())

print(" ".join(map(str, result)))

내 기준 까다로운 문제였다.

 

먼저 리스트 컴프리헨션으로 ballons의 숫자 리스트들을 만든다.

그다음 balloons에 요소가 있을 때 까지 반복하는데, 먼저 일단 맨 왼 쪽에 있는 애를 터뜨리고 시작한다. 그다음 그 index값을 뱉는거임.

 

만약 그 value가 > 0이면 left를 그 숫자만큼 반복한다. 대신 풍선 하나는 이미 터졌으니 -1을 해준다.

만약 value가 0보다 작은 값이면 절댓값을 주고 반대로 적용을 하는 식으로 옮긴다. 그다음 while의 첫문단인 popleft()가 실행되어 터지는거임.

 

그다음 "".join(map(str, result)) 하면 마무리.

 

728x90