프로그래머스 실패율 코드 및 해설 (파이썬)

2021. 8. 4. 09:09algorithm

반응형

https://programmers.co.kr/learn/courses/30/lessons/42889?language=python3 

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

입력으로 받은 stages를 오름차순으로 정렬합니다. 이후 Counter를 이용해 각 스테이지별 빈도를 딕셔너리로 저장하고, 이 딕셔너리의 키를 하나씩 받으며 실패율을 계산합니다. 실패율은 (현재 키의 빈도수) / (지금까지 남아있는 사용자 수)입니다. 처음의 사용자 수는 stages의 길이로 초기화하고, 이후 사용자 수에서 현재 키의 빈도수만큼 계속 빼줍니다. 이후 1-N까지 중에 실패율이 계산되지 않은 스테이지 번호가 있다면 일괄적으로 0으로 처리합니다. 마지막으로 이렇게 구한 실패율을 내림차순으로, 실패율이 같다면 스테이지 번호가 낮은 순으로 정렬합니다.

 

from collections import Counter

def solution(N, stages):
    # 사용자 명
    players = len(stages)
    failure = {}
    # 오름차순 정렬
    stages.sort()
    counter = Counter(stages)
    for stage in counter:
        # 1-N
        if stage in range(1,N+1):
            # (현재 스테이지에 멈춰있는 사용자 수) / (현재 스테이지까지 올라온 사용자 수)
            failure[stage] = counter[stage] / players
            players -= counter[stage]
    # 1-N 중 stages 값이 없으면 모두 0으로 
    for i in range(1,N+1):
        if i not in failure:
            failure[i] = 0
    # 실패율이 높고, 스테이지 번호는 낮은 순으로 정렬 
    failure = dict(sorted(failure.items(), key=lambda item: (-item[1], item[0])))
    return list(failure.keys())

 

반응형