https://www.acmicpc.net/problem/2346
큐를 이용한 문제다.
처음에 문제를 잘못이해해서 삽질을 좀 했다.
그리고 큐 회전하는거 숫자가 너무 헷갈렸다.
문제 설명
- 처음에는 1번부터 n번까지 번호가 매겨진 풍선들이 일렬로 배치되어있다.
- 첫 번째 풍선을 터뜨리고, 그 안에 적힌 숫자만큼 왼쪽이나 오른쪽으로 이동하여 다음 풍선을 터뜨린다. 양수는 오른쪽, 음수는 왼쪽으로 이동하는 것을 의미한다.
- 모든 풍선을 터뜨릴 때까지 이 과정을 반복한다.
- 터뜨린 풍선의 순서를 출력한다.
문제 풀이
풍선들의 번호를 큐에 넣고, 주어진 숫자만큼 큐를 회전시키는 방식으로 문제를 해결했다.
- 입력 처리:
- 첫 번째 입력으로 풍선의 개수 n
- 두 번째 입력으로 각 풍선에 적힌 숫자
- 큐 초기화:
- 큐에 1번부터 n번까지의 번호를 차례대로 넣음.
- 첫 번째 풍선을 터뜨리고, 그 번호를 출력합니다.
- 큐 회전:
- 현재 터뜨린 풍선에 적힌 숫자만큼 큐를 회전시킨다. 이때, 큐의 왼쪽이나 오른쪽으로 이동할 방향을 결정한다.
- 음수는 왼쪽으로 회전(음수 값), 양수는 오른쪽으로 회전(-양수 값)합니다. 한 번 풍선을 터뜨렸다면 그 숫자에서 1을 뺀 만큼 회전해야 한다.
- 반복:
- 큐에서 풍선을 하나씩 꺼내며 위의 과정을 반복.
- 큐가 비게 되면 모든 풍선을 터뜨린 것이므로 종료.
- 출력:
- 풍선을 터뜨린 순서대로 번호를 출력.
import sys
from collections import deque
n = int(sys.stdin.readline())
queue = deque(list(i+1 for i in range(n)))
arr = list(map(int, sys.stdin.readline().split()))
# 첫 번째 풍선을 터뜨림
tmp = queue.popleft()
print(tmp, end=' ')
# 큐가 빌 때까지 반복
while queue:
if arr[tmp-1] > 0:
queue.rotate(-arr[tmp-1] + 1) # 오른쪽 회전
else:
queue.rotate(-arr[tmp-1]) # 왼쪽 회전
tmp = queue.popleft() # 다음 풍선 터뜨리기
print(tmp, end=' ')
'PS' 카테고리의 다른 글
[백준] 24511번: queuestack 파이썬 풀이 (0) | 2024.09.23 |
---|---|
코딩테스트 파이썬 입출력 문법 정리 (0) | 2024.02.27 |