본문 바로가기
PS/programmers

[programmers] 2019 KAKAO BLIND RECRUITMENT : 실패율

by clolee 2021. 11. 29.

실패율

 

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

 

 

 

 

코드

 

스테이지 번호를 key로 하여 모든 스테이지 번호를 갖는 dictionary를 생성하고 value는 0으로 초기화.

failure dictionary의 value를 각 스테이지의 도전중인 사용자 수로 업데이트.

failure dictionary를 스테이지 번호에 대해 오름차순으로 정렬.

failure dictionary의 value를 클리어하지 못한 사용자수 / 스테이지에 도전한 사용자 수 로 업데이트.

현재 스테이지에 도전한 사용자 수에서 현재 스테이지에 실패한 사용자수를 빼서 다음 스테이지에 도전할 사용자 수 업데이트.

마지막 스테이지에 도달한 경우 모든 스테이지를 클리어 했으므로 실패율을 표현하는 failure dictionary에서 key가 마지막 스테이지 N + 1 인 경우를 삭제.

failure dictionary를 value인 실패율이 높은 순인 내림차순으로 정렬.

실패율이 높은 순으로 정렬된 failure dictionary에서 스테이지 번호에 해당하는 key 값들을 list 형태로 return.

 

def solution(N, stages):
    user_cnt = len(stages)
    failure = {}
    for i in range(1, N + 1):
        failure[i] = 0
    for i in stages:
        if i in failure:
            failure[i] += 1
    failure = dict(sorted(failure.items()))
    for k, v in failure.items():
        if user_cnt != 0:
            failure[k] = v / user_cnt
            user_cnt -= v
    if N + 1 in failure:
        del failure[N + 1]
    failure = dict(sorted(failure.items(), key=lambda x : x[1], reverse=True))
    return list(failure.keys())

 

 

코드 실행

 

n = int(input())
stages = list(map(int, input().split()))

def solution(N, stages):
    user_cnt = len(stages)
    failure = {}
    for i in range(1, N + 1):
        failure[i] = 0
    for i in stages:
        if i in failure:
            failure[i] += 1
        
    failure = dict(sorted(failure.items()))
    for k, v in failure.items():
        if user_cnt != 0:
            failure[k] = v / user_cnt
            user_cnt -= v
    if N + 1 in failure:
        del failure[N + 1]
    failure = dict(sorted(failure.items(), key=lambda x : x[1], reverse=True))
    return list(failure.keys())

print(solution(n, stages))

 

 

댓글