소스 코드

def solution(N, stages):
    answer = [0 for _ in range(N)]
    # 유저수
    u = len(stages)

    # 스테이지 정렬
    stages.sort(reverse=True)
    
    # 클리어 못한 유저수
    # 해당 스테이지에서 막힌 유저수, 해당 스테이지에 도달한 유저수, 스테이지 번호
    unclear = [[0,0,_] for _ in range(N)]

    # 현재까지의 유저 수
    cnt = 0
    for q in stages:
        cnt += 1

        if q != N + 1:
            unclear[q-1][0] += 1
            unclear[q-1][1] = cnt

    # 실패율, 스테이지 번호
    u_info = [[0,_+1] for _ in range(N)]
    for w in unclear:
        if w[0] != 0 and w[1] != 0:
            u_info[w[2]][0] = w[0] / w[1]
        else:
            u_info[w[2]][0] = 0

    u_info.sort(key=lambda x:x[0], reverse=True)

    # 실패율
    for e in range(N):
        answer[e] = u_info[e][1]

    return answer

 


해결 방법

1. 해당 스테이지에 몇 명이 도달했는지 알아야 하고, 몇 명이 통과했는지 알아야 함

 

2. dict 형태든, [0,1] 형태든 해당 index의 값(스테이지 번호)만 저장해야 함

 

3. 이후 실패율에 따라 정렬만 진행하면 됨

(count를 쓰면 좀 더 보기 좋은 코드를 작성할 수 있을 것이라 생각하지만, count 사용한 내 코드는 속도가 느려서 포기...)


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.