본문 바로가기
코딩테스트

[파이썬] 실패율 - 2019 KAKAO BLIND RECRUITMENT [CODING TEST #36]

by ALTERww 2022. 8. 3.
320x100

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

 

 

두 개의 딕셔너리를 만든다.

  • 1. users : 각 스테이지별 막힌 유저수를 기록
  • 2. fail : 각 스테이지별로 계산한 실패율을 기록

users는 모든 스테이지를 통과한 경우 N+1라고 표기하는데, 실패율은 1~N까지만 계산하면 된다. 

 

전체 유저수를 임시 변수값에 저장한 뒤, 1스테이지부터 실패 유저수 / 도달한 유저수를 계산하여 fail에 저장한다.

이후, 전체 유저수에서 실패 유저수를 빼면 다음 스테이지에 도달한 유저수를 계산할 수 있다.

 

도달한 유저수가 진작에 0이 되어 0/0을 계산하게 되면 에러가 난다.

그러므로 0일 경우에는 fail = 0으로 저장하는 조건을 추가한다.

 

그리고 fail 딕셔너리의 value 기준으로 내림차순 정렬을 하고, 맨 앞에서부터 key값을 answer.append한다.

 

def solution(N, stages):
    answer = []
    users = {k+1:0 for k in range(N+1)}
    fail = {k+1:0 for k in range(N)}
    total_users = len(stages)
    
    for stage in stages: # 각 stage별 막힌 구간의 유저 수 저장
        users[stage] += 1
        
    user_count = total_users # 전체 유저수
    for i in range(N):
        if user_count != 0: ##### 도달한 유저가 있어야 하므로 조건 추가
            fail[i+1] = (users[i+1]/user_count) # 해당 스테이지에서 막힌 유저 수 / 도달한 유저 수
        else: fail[i+1] = 0 ##### 도달한 유저가 없으면 0/0 대신 확률 0으로 처리;
        user_count -= users[i+1] # [i+1] 스테이지에 도달한 유저수
        
    des = sorted(fail.items(),key = lambda x:x[1],reverse=True) # 실패율 기준으로 내림차순 정렬
    for d in des:
        answer.append(d[0])
    return answer

댓글