https://www.acmicpc.net/problem/2346
공부 날짜 : 2023.01.18
정답 참조 여부 : X
원형으로 나열된 풍선을 터트리고 풍선안의 종이에 적힌 숫자만큼 돌려가며(?) 풍선을 터트릴때 터진 풍선의 순서를 묻는 문제이다.
처음 문제를 봤을 때 덱 구조를 이용해서 앞 뒤에서 뽑으면 될거 같았다.
하지만 문제를 보면서 그냥 인덱스만 왔다갔다 해도 풀릴거 같아서 인덱스만 바꿔나간 풀이와 덱구조를 이용한 풀이 2가지 방법으로 풀었다.
덱 구조가 원래 deque 라이브러리를 써야 시간이 빨리 가능하지만 실버3 문제라 시간 넉넉할거 같아서 그냥 pop과 insert를 썼다. 다행히 문제는 정답으로 나왔고, depue라이브러리에 좀 익숙해 질겸 depue를 사용해서도 풀어봤다. (총 3가지 풀이)
인덱스를 이용한 문제는 넣고 빼는 과정없이 그냥 인덱스에 값을 더하고 빼는 식으로 구현했더니 정답으로 나왔다.
이번 문제에서 어려웠던 부분은 방향에 따라 넣고 빼는 횟수가 달랐다.(양수일 경우 -1번 회전 음수일 경우 +1번 회전)
이 부분은 그냥 디버깅 해보면서 해결한건데 실버난이도에서 디버깅 쓰니까 자존심이 좀 상한다....
골드문제 디버깅안쓰고 풀던 2022년의 나는 죽은듯
import sys
from collections import deque
input = sys.stdin.readline
############################################################
n = int(input())
ballon = list(map(int, input().split()))
for i in range(n):
ballon[i] = [ballon[i], i+1]
############################################################
# deque 사용
ballon = deque(ballon)
for _ in range(n):
#이번에 터진 풍선의 숫자와 풍선의 숫자
order, num = ballon.popleft()
print(num)
#풍선이 모두 터졌으면 스톱
if len(ballon) == 0:
break
#숫자에 따라 회전 방향이 달라짐
if order > 0:
#회전 횟수 -1 만큼 회전
for __ in range(order - 1):
ballon.append(ballon.popleft())
#음수 방향일 경우
else:
#회전 횟수만큼 회전
for __ in range(-order):
ballon.appendleft(ballon.pop())
############################################################
# #자료구조 이용
# for _ in range(n):
# #이번에 터진 풍선의 숫자와 풍선의 숫자
# order, num = ballon.pop(0)
# print(num)
# #풍선이 모두 터졌으면 스톱
# if len(ballon) == 0:
# break
#
# #숫자에 따라 회전 방향이 달라짐
# if order > 0:
# #회전 횟수 -1 만큼 회전
# for __ in range(order - 1):
# ballon.append(ballon.pop(0))
# #음수 방향일 경우
# else:
# #회전 횟수만큼 회전
# for __ in range(-order):
# ballon.insert(0, ballon.pop(-1))
############################################################
# # 인덱스만 변화하며 해결
# index = 0
# # 풍선이 안남을 때 까지 반복
# while ballon:
# #이번에 터진 풍선의 숫자와 풍선의 숫자
# order, num = ballon.pop(index)
# # 풍선이 남아있고, 음수 회전일 때
# if ballon and order < 0:
# index = (index + order) % len(ballon)
# # 풍선이 남아있고, 양수 회전일 때
# elif ballon:
# index = (index + order -1) % len(ballon)
# print(num)