ALGORITHM

[python 3] 2019 KAKAO BLIND RECRUITMENT 실패율

girin_dev 2023. 5. 7. 20:51
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr


프로그래머스 실패율 문제 

 

 

 

# 초안 ( 런타임 에러 발생. )
def solution(N, stages):
    answer = []
    stage_maps = {}

    for i in range(1, N+1, +1):
        challenger = [num for num in stages if num >= i]
        failure = [num for num in stages if num == i]
        failure_rate = len(failure) / len(challenger)
        stage_maps[i] = failure_rate
        # print(f' 도전자 : {challenger} , 실패자 : { failure} , 실패율 : {failure_rate} , 딕셔너리 체크 : {stage_maps}'  )

    # 내림차순 밸류값 기준 정렬.
    sorted_dict = dict(sorted(stage_maps.items(), key=lambda item: item[1] , reverse=True))


    return list(sorted_dict.keys())

 

0으로 나누는 케이스를 처리하지 않을 경우 런타임 에러가 난다.

 

 

따라서 division by zero 에러 처리를 해줘야 한다. 

 

 

def solution(N, stages):
    stage_maps = {}

    for i in range(1, N+1, +1):
        challenger = [num for num in stages if num >= i]
        failure = [num for num in stages if num == i]

        if len(challenger) != 0:
            failure_rate = len(failure) / len(challenger)
        else:
            failure_rate == 0

        stage_maps[i] = failure_rate

    # 내림차순 밸류값 기준 정렬.
    sorted_dict = dict(sorted(stage_maps.items(), key=lambda item: item[1] , reverse=True))

    return list(sorted_dict.keys())

 

 

 

 

다음은 다른 사람이 푼 더 간결한 풀이다. 

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)

 

스테이지에 대한 계산이 한 차례 줄어서 내가 짠 코드 보다 더 빠른 듯 싶다.

 

 

 

🥸  파이썬에 익숙치 않아서 파이썬스러운 코드가 아닐 수도 있습니다.

🤨 이상한 점이 있다면 댓글 부탁드립니다.

 

320x100
반응형