[프로그래머스] 실패율

Jin Lee·2022년 5월 8일
0

프로그래머스 Lv.1

목록 보기
18/32
post-thumbnail

문제 링크

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

문제 설명

  • 실패율은 다음과 같이 정의한다.
    스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
  • 첫번째 for루프에서는 stage에 도달하였지만 stage를 클리어하지 못한 플레이어의 수를 구하고 이 값들은 실패율의 분자로 사용 된다.
  • 구해놓은 stage에 도달한 사람들의 명 수 정보인 not_clear 배열을 누적합을 사용해서 stage를 클리언 유저의 수를 구하고 이 값들은 실패율의 분모로 사용 된다.
  • 계산한 실패율을 key 값으로 하여 스테이지 단계를 value로 담아주는 딕셔너리를 생성한다. 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.라는 부분에서 추가적으로 if 문으로 처리해 주었다.
  • key 값(실패율)을 list로 추출하여 높은 순서로 정렬하여 해당 키값에 해당하는 value들(스테이지 번호)을 answer list에 추가한다.
def solution(N, stages):
    answer = []
    not_clears = [0] * (N + 2)
    clears = [0] * (N + 2)
    # 501 번째는 모두 클리어한 유저 수
        
    for stage in stages:
        not_clears[stage] = not_clears[stage] + 1
        # stage별 도달 했지만 해당 stage를 클리어 하지 못한 플레이어의 수를 구함(분자)
    
    user_num = len(stages)
    # stages 배열의 원소의 갯수는 유저 수를 의미
    
    temp = 0
    for i in range(1, N + 2):
        temp = temp + not_clears[i - 1] 
        clears[i] = user_num - temp
        # stage를 클리어한 유저의 수(분모)
    
    results = {}
    for i in range(1, N + 1):
        if not_clears[i] == 0:
            if 0 not in results:
                results[0] = [i]
            else:
                results[0].append(i)
        
        else:
            if (not_clears[i] / clears[i]) not in results:
                results[(not_clears[i] / clears[i])] = [i] 
            else:
                results[(not_clears[i] / clears[i])].append(i)
            
    results_key = list(results.keys())
    results_key.sort(reverse = True)
    
    for key in results_key:
        answer = answer + results[key]
    
    return answer
profile
깃허브 : https://github.com/jinlee9270

0개의 댓글