2019 KAKAO BLIND RECRUITMENT > level1 실패율
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
실패율 : 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수/스테이지에 도달한 플레이어 수
N : 전체 스테이지 개수
stages : 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열
실패율이 높은 스테이지부터 내림차순으로 스테이지 번호가 담겨있는 배열을 리턴
import heapq
def solution(N, stages):
fail = {}
heapq.heapify(stages)
for i in range(1, N+1):
fail[i] = len(stages)
cnt = 0
while stages and stages[0] == i:
cnt+=1
heapq.heappop(stages)
if not stages:
continue
fail[i] = cnt / fail[i]
answer = list(dict(sorted(fail.items(), reverse=True, key = lambda x:x[1])).keys())
#answer = sorted(fail , reverse=True, key = lambda x:fail[x]) 로 줄일 수 있다.
return answer
수정해야 할 부분
answer = list(dict(sorted(fail.items(), reverse=True, key = lambda x:x[1])).keys())
위의 코드와 아래의 코드가 동일하게 동작하지만 아래의 코드가 더 간결
--> sorted에 딕셔너리를 그냥 넘기면 딕셔너리의 키가 들어가게 됨
--> 딕셔너리의 value 값으로 정렬 ( 값이 같다면 키가 작은 순서대로)
answer = sorted(fail , reverse=True, key = lambda x:fail[x])
answer = sorted(fail, reverse=True, key=fail.get)
- heap을 사용하지 않고 len() / count() 을 사용하는 경우도 있음
'study > 알고리즘' 카테고리의 다른 글
[알고리즘] 다이나믹 프로그래밍(동적 계획법) - 1 (0) | 2021.12.03 |
---|---|
[알고리즘/프로그래머스] 그리디 - 조이스틱 (0) | 2021.12.02 |
[알고리즘 / 자료구조] 트리(Tree) (0) | 2021.11.26 |
[알고리즘 / Oracle] 프로그래머스 - 보호소에서 중성화한 동물, 우유와 요거트가 담긴 장바구니 (0) | 2021.11.25 |
[알고리즘 / 자료구조] 우선순위 큐(Priority Queue)와 힙(Heap) (2) | 2021.11.25 |