알고리즘

[프로그래머스] 실패율

j9972 2023. 4. 6. 17:35
728x90

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

2. 접근

1. 실패율 = ( 도달 O & 클리어 X ) / ( 도달 O )

2. 하나의 스테이지에 도달한 모든 유저가 통과를 했을 경우 즉, 특정 스테이지의 실패율이 0 일 가능성을 배제하면 안된다

3. len(stages) 가 총 유저 수라는 사실을 잊으면 안된다.

4. 나는 실패율 조정시, 분모의 값 부분에서 혼동이 있었는데 len(stages) 을 복사해서 cnt 값을 매 스테이지마바 복사값에서 빼주면 된다

 

3. 풀이

def solution(N, stages):
    ans = []
    
    res = []
    nStage = 0
    stage = len(stages) # 실패율 분모 조정을 위한 변수
    
    while True:
        if nStage == N:
            break
        nStage += 1
        
        cnt = 0
        for i in stages:
            if i == nStage:
                cnt += 1 # 도달한 사람
                
        if cnt == 0:
            res.append([0,nStage])
        else:
            res.append([cnt/stage, nStage])
            
        stage -= cnt # 분모 조저을 위함
        
    res = sorted(res, key=lambda x: -x[0])
    
    for i in res:
        ans.append(i[1])
        
    return ans