[알고리즘] 프로그래머스 - 실패율

June·2021년 9월 6일
0

알고리즘

목록 보기
246/260

프로그래머스 - 실패율

내 틀린 코드

def solution(N, stages):
    try_dict = dict()# k: 스테이지 v : (성공 횟수, 시도횟수)
    for i in range(1, N+1):
        try_dict[i] = (0, 0)


    for stage in stages:
        for i in range(1, stage + 1):
            if i == N + 1:
                continue
            if i == stage:
                existed_val = try_dict[i]
                try_dict[i] = (existed_val[0], existed_val[1] + 1)
            else:
                existed_val = try_dict[i]
                try_dict[i] = (existed_val[0] + 1, existed_val[1] + 1)

    for k, v in try_dict.items():
        if v[1] == 0:
            try_dict[k] = 0
        else:
            try_dict[k] = v[0] / v[1]

    try_dict = {k : v for k, v in sorted(try_dict.items(), key = lambda x : x[1])}
    return list(try_dict.keys())

실패했지만, 이 기회에 값을 기준으로 딕셔너리 정렬하는 것 확실하게 정리하자.

다른 사람 풀이


def solution(N, stages):
    fail_rate_dict = dict()
    total_user = len(stages)

    for stage in range(1, N+1):
        if total_user != 0:
            fail_user = stages.count(stage)
            fail_rate_dict[stage] = fail_user / total_user
            total_user -= fail_user
        else:
            fail_rate_dict[stage] = 0

    return sorted(fail_rate_dict, key=lambda x : fail_rate_dict[x], reverse=True)

문제를 가장 잘 이해하고 잘 푼 문제다. 그저 급하게 풀면 주어진 stage 리스트를 반복문을 돌릴텐데, 이 풀이는 아예 그냥 stage 별로 돌렸다. 그리고 매 단계에서 total_user의 개수를 빼줌으로서 실패율이 말이 되게 만들었다.

0개의 댓글