코딩테스트

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

math_tbro 2022. 1. 14. 23:04

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

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

문제가 길어서 간략하게 캡쳐했다.

 

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

풀이 :

 

나는 리스트 성애자다. 그냥 리스트를 진짜 좋아한다... 

이거 딕셔너리는 그냥 거부감 들어서 절대 안써왔는데 이 문제는 딕셔너리로 풀면 좋겠다 생각만하고 리스트만 파다가 그냥 출제자의 의도에 따르기로 하고 딕셔너리와 친해지기로 했다.

 

dict는 fatil_ratio[key] = 해당값으로 저장된다.

그러니 키가 1 일때 1/8 , 키가 2일때  3/7 로 이렇게 들고 올수 있다. 

fail_ratio 를 dict로 받아오고 사람의 수가 0이면 fail_ratio를 0으로 설정한다. 이것의 답은 [i]고

사람이 0이 아니면 count 로 개수를 센 것을 사람의 수로 나눠주고 

그 수를 다시 사람의 수에서 빼준다.

 

이렇게 fail_ratio 딕셔너리를 만들고

lambda x : fail_ratio[x] 를 써서 정렬된 값에 key들을 나열해주면 정답을 구할 수 있다.