python/백준 - 14919번 문제에 대한 분석임.
import heapq as h
n = int(input())
list_ = list(map(float, input().split()))
list_.sort()
answer = []
for i in range(1, n + 1):
m = round((1/n) * i, 7)
while True:
if list_:
t = h.heappop(list_)
else:
print(len(answer), end=' ')
answer = []
break
if t < m:
h.heappush(answer, t)
elif t >= m:
h.heappush(list_, t)
print(len(answer), end=' ')
answer = []
break
m과 비교하여m보다 작을 경우 힙에 넣고 m보다 클 경우 지금까지 넣은 힙의 길이를 출력한다.import heapq as h
n = int(input())
list_ = list(map(float, input().split()))
list_.sort()
list_변수를 오름차순으로 정렬.heapify 메소드를 써도 되지만 시간복잡도 평균은 list.sort()가 더 빠르다.answer = []
for i in range(1, n + 1):
m = round((1/n) * i, 7)
answer list 선언m을 선언. 
while True:
if list_:
t = h.heappop(list_)
else:
print(len(answer), end=' ')
answer = []
break
list_만 순회하므로 시간복잡도가 커지지 않는다.)list_가 빈 리스트가 아니라면 heappop을 통해 최소값을 추출하여 t에 넣어준다.list_가 빈 리스트라면 더이상 추출할 최소값이 없으므로list_의 순회를 마쳤으므로)answer 힙의 길이를 출력하고answer를 비워주는 이유는 첫 구간에 모든 값이 다 들어갈 경우 이후 구간에는 0이 출력되어야 하지만 answer를 비워주지 않아서 answer길이의 값이 출력된다.3
0.1 0.1 0.1 0.1
>> 4 4 4 4 if t < m:
h.heappush(answer, t)
elif t >= m:
h.heappush(list_, t)
print(len(answer), end=' ')
answer = []
break
t가 구간을 나눌 기준값인 m보다 작다면 answer힙에 값을 넣는다.list_에서 추출한 최소값t가 구간을 나누는 기준값인 m보다 같거나 크다면answer에 들어간 값들이 한 구간임을 의미하므로t는 다시금 list_에 넣고 answer의 길이를 출력한 뒤answer를 비워준다.(다시 다음 구간 수를 넣어야하기 때문)