import heapq
n = int(input())
line = list(map(int, input().split()))
q = []
for i in range(n):
heapq.heappush(q, (i+1, line[i]))
ans = []
while q:
tmp = []
tmp_ans = []
while q:
height, taller = heapq.heappop(q)
cnt = 0
for i in ans:
if i > height:
cnt += 1
if cnt == taller:
heapq.heappush(tmp_ans, (height, taller))
else:
heapq.heappush(tmp, (height, taller))
check = 1
while tmp_ans:
height, taller = heapq.heappop(tmp_ans)
if check == 1:
ans.append(height)
check = 0
else:
heapq.heappush(tmp, (height, taller))
q = tmp
print(*ans)
힙을 이용해서 풀었다.
힙에서 하나씩 빼서 만약 키가 더 큰 사람의 수가 같으면 임시 힙에 넣어주고
조건에 해당되는 사람들이 많아서 임시힙에 여러개가 들어가면 키가 가장 작은 것 넣고 나머지는 다시 힙에 넣어서 정렬하였다 (키가 작은 것을 넣은 이유는 다음에 키가 더 큰 사람을 카운트할 때 영향을 주지 않기 때문에) (말이 좀 이해하기 힘들지만)
팝, 푸쉬 연산이 많아서 좀 헷갈려서 무한루프를 많이 돌았다