알고리즘

[알고리즘] 프로그래머스 실패율

오승미 2022. 3. 8. 01:24

✔️ code

 

def solution(N, stages):
    answer = []
    fail_rate=[]    #실패율
    
    for i in range(1, N+1):
        user1=0 #도전 유저 수
        user2=stages.count(i)   #클리어하지 못한 유저 수
        
        for j in stages:
            if i<=j:
                user1+=1
        
        fail_rate.append((i, user2/user1))  #튜플 형태로 저장
    
    #실패율을 기준으로 내림차순 정렬
    fail_rate.sort(key=lambda x:x[1], reverse=True)
    
    #튜플의 첫 번째 값만 저장
    for i in range(N):
        answer.append(fail_rate[i][0])

 

# solve:

1~5 단계가 있다고 할때 4 스테이지에 있는 유저는 1, 2, 3, 4 단계에 도전한 것이므로

i<=j 조건문을 사용해 도전 유저의 수를 구했다.

튜플 형태로 (스테이지, 실패율) 을 저장하고 람다식으로 내림차순 정렬한 뒤,

튜플의 첫 번째 값(스테이지 값) 만 저장한 것인데 실행에는 오류가 나지 않았으나 채점을 하면서 오류가 발생했다.

시간 초과가 문제인 것 같아 다시 풀어 보았다.

 

 

✔️ code

 

def solution(N, stages):
    answer=[]
    fail_rate={}
    total_user=len(stages)
    
    for i in range(1, N+1):
        if total_user!=0:   #도전유저-실패유저 값이 0이 아니라면,
            fail_user=stages.count(i)
            fail_rate[i]=fail_user/total_user
            total_user-=fail_user
        else:   #값이 0이라면,
            fail_rate[i]=0  #실패율은 0이다.
    #딕셔너리 값에 있는 실패율로 내림차순 정렬하고 키 값을 반환
    answer= sorted(fail_rate, key=lambda x:fail_rate[x], reverse=True)
    return answer

 

 

>>>

람다식을 사용하는 것에 익숙하지 않아 이것은 다른 풀이를 참고했다.

왜 람다식은 쓸 때마다 헷갈리는지 모르겠다. 더 많이 문제를 풀다 보면 해결되겠지 !