[Python] 프로그래머스 - Level1 - 실패율

강주형·2022년 8월 10일
0

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

2019 KAKAO BLIND RECRUITMENT

def solution(N, stages):
    answer = [i for i in range(1, N+1)]
    failure_rate = []

    for n in range(1, N+1):
        target_user = 0
        fail_user = 0
        for s in stages:
            if s >= n:
                target_user += 1
            if s == n:
                fail_user += 1
        try:
            failure_rate.append(fail_user/target_user)
        except:
            failure_rate.append(0)

    return [a for f, a in sorted(zip(failure_rate, answer), key=lambda x:(-x[0], x[1]))]

실패율로 먼저 내림차순 정렬하고, 그걸 스테이지 단계로 다시 오름차순 정렬하는 법을 몰라서 오래 걸렸다.
결국 혼자 못 풀고 정렬 방법을 검색해봤음

return에 key=lambda x:(-x[0], x[1])이게 튜플의 첫 번째 원소는 내림차순, 두 번째 원소는 오름차순으로 정렬하겠다는 뜻

타인 코드

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)

이 분은 튜플말고 딕셔너리를 사용하셨다.
이렇게 딕셔너리를 사용하면 스테이지 단계와 실패율을 한 번에 넣을 수 있어서 더 좋은 것 같다.


  1. 리스트, 튜플, 딕셔너리가 어쩔 때 쓰이면 좋은지 파악하기
  2. lambda와 친해지기
profile
Statistics & Data Science

0개의 댓글