문제 참고
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드 작성
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 배열에 새롭게 저장하면 된다.
