https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
n=int(input())
s=list(map(int,input().split()))
start=0
index=[x for x in range(1,n+1)] # 인덱스 리스트 따로 만들어서 같이 처리
answer=[]
temp = s.pop(start) # 시작 처리
answer.append(index.pop(start))
while s: # s에 모든 수가 pop될까지
if temp<0: # 해당자리의 값이 음수이면
start = (start+temp)%len(s) # 파이썬에서는 음수%양수하면 (양수+음수)%양수 값이 나온다
else:
start=(start+temp-1)%len(s) # 원래에서 길이가 하나 줄었으니 -1 하고 바뀐 길이로 나누기
temp = s.pop(start) # 시작처리와 똑같은 과정
answer.append(index.pop(start))
print(*answer)
위에서 enumerate 이용한 풀이
N = int(input())
nums = list(map(int,input().split()))
start = 0
lst = []
result = []
for i in enumerate(nums, start=1):
lst.append(i)
temp = nums.pop(start)
result.append(lst[start][0])
lst.pop(start)
while nums:
if temp < 0:
start = (start+temp)%len(nums)
else:
start = (start+temp-1)%len(nums)
temp = nums.pop(start)
result.append(lst[start][0])
lst.pop(start)
print(*result)
한바퀴 돌아서 새 인덱스를 찾을 때 -> 어렵다... 길이만큼 나눴을 때 나머지를 이용한다는 것은 암기하자
'백준' 카테고리의 다른 글
백준 2669. 직사각형 네개의 합집합의 면적 구하기 (0) | 2023.08.28 |
---|---|
백준 1244. 스위치 켜고 끄기 (0) | 2023.08.21 |
백준 1158번: 요세푸스 문제 (0) | 2023.08.15 |
백준 2164번: 카드2 (0) | 2023.08.15 |
백준 2941번: 크로아티아 알파벳 (0) | 2023.07.29 |