문제 참고
코드 작성
from heapq import heappush, heappop
def solution(N, stages):
answer = []
user_num = len(stages)
dp = [0 for _ in range(N + 2)]
for i in stages:
dp[i] += 1
result = []
for i in range(1, len(dp)):
if dp[i] == 0:
heappush(result, (0.99, i))
else:
heappush(result, (-(dp[i] / user_num), i))
user_num -= dp[i]
while result:
x, y = heappop(result)
if y == N + 1:
continue
answer.append(y)
return answer
- 사람들이 어느 스테이지에서 진행 중인지를 담는 dp 배열을 생성한다.
- stages를 읽어서 dp에 스테이지 인원을 추가한다.
- result는 해당 스테이지의 실패율을 담는다.
- 만약 dp 값이 0이라면 0.99로 heappush하여 heappop할 때 가장 늦게 나오도록 한다.
- dp의 값이 0이 아니라면 해당 스테이지의 실패율을 구할 수 있다.
실패율에 (-)를 곱하는 이유는 실패율이 높은 stage부터 꺼낼 수 있기 때문이다.
- 마지막으로 result에 저장된 값만 꺼내어 answer 배열에 새롭게 저장하면 된다.