백준 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
'코딩테스트' 카테고리의 다른 글
백준 25192 파이썬 문제풀이. (0) | 2023.08.11 |
---|---|
백준 1037.파이썬 문제풀이 __name__ == "__main__"을 써본다면. (0) | 2023.08.11 |
백준 11866 파이썬 문제풀이. (0) | 2023.08.08 |
파이썬 queue 모듈 사용하기. 백준 2164 파이썬 문제풀이. (0) | 2023.08.07 |
백준 9012 파이썬 문제풀이. (0) | 2023.08.07 |