실패율 - Python

2023. 12. 13. 00:07공부/📝 프로그래머스

1. 풀이 코드

def solution(N, stages):
    answer = []
    count_list1 = []
    count_list2 = []
    people = len(stages)
    for i in range(1, N + 1):
        if people == 0:
            count_list1.append(0)
            count_list2.append(0)
        else:
            count_list1.append((stages.count(i)/people))
            count_list2.append((stages.count(i)/people))
            people -= stages.count(i)
    count_list2.sort()

    # print(count_list1)
    # print(count_list2)
    for _ in range(N):
        search_target = count_list2.pop()
        for i in range(N):
            if search_target == count_list1[i]:
                if i + 1 not in answer:
                    answer.append(i + 1)
    # print("=" * 10)
    return answer


print(solution(7, [2, 1, 2, 6, 2, 4, 3, 3]))

  처음에 문제를 읽을 때 실패율이 아니라 실패 횟수로 봐서 뒤늦게 수정하느라 코드가 난잡해졌습니다. count_list1은 스테이지 1번부터의 차례대로 실패율이며, count_list2는 실패율을 오름차순으로 정렬한 뒤에, pop() 메서드와 index() 메서드를 사용하여 위치값을 찾았습니다.

  print(solution(7, [2, 1, 2, 6, 2, 4, 3, 3]))은 도달한 인원이 없을 경우. people 변수가 0이 되면서 0으로 나누는 오류를 제대로 검출하는지 알기위해 적었습니다.

 

2. 다른 사람 풀이 코드

def solution(N, stages):
    result = {}
    denominator = len(stages)
    for stage in range(1, N+1):
        if denominator != 0:
            count = stages.count(stage)
            result[stage] = count / denominator
            denominator -= count
        else:
            result[stage] = 0
    return sorted(result, key=lambda x : result[x], reverse=True)

  저도 처음부터 실패율이라고 읽었더라면 이와 비슷하게 풀었으리라 생각됩니다. 딕셔너리를 사용하는게 편하긴 하군요.


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr