카테고리 없음

[프로그래머스] 2019 카카오 블라인드 - 실패율

cme10575 2021. 8. 21. 13:39

문제

 

https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr


풀이

 

from collections import Counter
import operator

def solution(N, stages):
    dic = dict(Counter(stages))
    dic2 = dic.copy()
    
    for n in range(N+1, 0, -1):
        if n == N+1:
            if n not in dic:
                dic[n] = 0
        else:
            if n not in dic:
                dic[n] = dic[n+1]
            else:
                dic[n] += dic[n+1]
    
    results = {}
    for i in range(1, N+1):
        if i in dic2:
            results[i] = (dic2[i]/dic[i])
        else:
            results[i] = (0)
    
    sdict= sorted(results.items(), key=operator.itemgetter(1), reverse=True)
    
        
    return [s[0] for s in sdict]

어차피 전체 플레이어 수는 stages의 길이로 알고있기 때문에 스테이지별 인원을 첫번째 포문을 통해 따로 누적시키지 않았어도 됐다.

하나의 포문만 돌며 스테이지별 통과하지 못한 인원을 뺐어야 했다.

 


다른 사람의 풀이

def solution(N, stages):
    fail = {}
    for i in range(1,N+1):
        try:
            fail_ = len([a for a in stages if a==i])/len([a for a in stages if a>=i])
        except:
            fail_ = 0
        fail[i]=fail_
    answer = sorted(fail, key=fail.get, reverse=True)
    return answer