[BOJ] 2346 | 풍선 터뜨리기

Gaanii·2024년 10월 24일
0

Problem Solving

목록 보기
72/210
post-thumbnail

아래 백준 로고를 클릭하면 해당 문제로 이동합니다 😀

BOJ 로고



풀이과정


아이고 두야 ... 엄청 간단한 문제인줄 알았는데 생각보다 그건 아니었음(사실 내가 멍청한게 맞음)

풀어보자면, 문제에서 풍선이 원형으로 놓여있다는 점에 주목했다.

입력받은 풍선 속 종이 숫자를 enumerate를 이용해 인덱스 번호와 함께 묶어서 생각했다.
그리고 이걸 큐에 넣고 q를 계속 돌아보자.

1번 풍선을 터트리고 나면 숫자 3을 얻을 수 있다. 그러면 4번 풍선을 터트려야 하는데, 다음 터트려야 할 풍선을 큐의 맨 앞으로 가져오는 걸 반복하면 금방 답이 나온다.

deque.rotate를 사용할건데, -1이라면 반시계방향으로 한칸, +1이라면 시계방향으로 한칸 큐가 회전한다.
풍선 속 종이의 숫자가 음수일수도, 양수일수도 있기 때문에 이 문제에 사용하기 딱이다!

그래서 음수일때와 양수일때 구분을 해서 큐를 돌려주면 된다.
아래에서 회전하는 모습을 볼 수 있다.

>>> print(q)
deque([(0, 3), (1, 2), (2, 1), (3, -3), (4, -1)])
deque([(3, -3), (4, -1), (1, 2), (2, 1)])
deque([(4, -1), (1, 2), (2, 1)])
deque([(2, 1), (1, 2)])
deque([(1, 2)])
deque([])


코드


from collections import deque

N = int(input())
poong = list(map(int, input().split()))
q = deque(enumerate(poong))

result = []

while q:
    idx, movement = q.popleft()
    result.append(idx + 1)

    if movement > 0:
        q.rotate(-(movement -1))
    elif movement < 0:
        q.rotate(-movement)

print(*result)


결과


정답

0개의 댓글