본문 바로가기

study/알고리즘

[알고리즘/프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 실패율

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() 을 사용하는 경우도 있음