백준 - 2346

Giho Kim·2023년 9월 17일

코테 연습

목록 보기
8/26

문제

내가 푼 방법
1. 풍선을 [move, num]으로 만들어 준다
2. while 풍선일때 popleft()를 해줘 answer에 num 삽입
3. 만약 풍선이 비어있지 않다면

  • move가 양수면 이미 하나가 빠졌기때문에 popleft()를 move - 1만큼해주며 append해준다
  • move가 음수면 insert(0, pop())을 move만큼 해준다
from collections import deque

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

for i in range(n):
  ballons[i] = [ballons[i], i + 1]
print(ballons)
ballons = deque(ballons)
answer = []
while ballons:
  move, num = ballons.popleft()
  answer.append(num)
  if len(ballons) == 0:
    break

  if move > 0:
    for _ in range(move - 1):
      ballons.append(ballons.popleft())

  elif move < 0:
    for _ in range(-move):
      ballons.insert(0, ballons.pop())


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

지리는 코드
1. queue에는 rotate이라는 기능이있다.
rotate(1)은 오른쪽으로 rotate(-1)은 반대로 회전한다

>>> from collections import deque
>>> test = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> test = deque(test)
>>> test.rotate(2) 
>>> result = list(test)
>>> result
[8, 9, 1, 2, 3, 4, 5, 6, 7]
  1. 이점을 활용해 양수일땐 move -1만큼 rotate(1)
  2. 음수일땐 move만큼 rotate(-1)
from collections import deque

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

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

while ballons:
  move, num = ballons.popleft()
  print(num)
  if len(ballons) == 0:
    break

  if move > 0:
    for _ in range(move - 1):
      ballons.rotate(-1)
  elif move < 0:
    for _ in range(-move):
      ballons.rotate(1)
profile
취준돌이 개발자 김기호

0개의 댓글