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

 

Level 1 문제이고, 스스로 푼 문제다!

 

stages의 각 인덱스는 사용자의 번호이고, 각 값은 각 유저가 있는 스테이지 번호다 

stage[i] 값은 i 유저가 있는 스테이지이고, 이를 아직 깨지 못한 상태다. 따라서 i 는 stage[i] 단계에서 실패한 유저에 속한다 

각 단계에 대해 전체 유저를 완전탐색으로 돌면서 각 단계에서 실패한 유저 수를 구한다음 해당 스테이지에서 성공한 유저들의 수로 나눈다. 이 값을 fail 해당 단계 값에 추가한다 

 

처음에는 fail을 리스트로 구현하려고 했지만 실패율로 내림차순 정리하고, 인덱스를 출력해야하므로 해당 실패율에 대응하는 값도 필요해서 딕셔너리로 구현했다 

 

주의할 점

실패율 자체가 소수이기 때문에, ' // ' 연산을 사용하면 다 0으로 나와서 틀린다

그렇기 때문에 ' / ' 연산을 이용하고, onStage == 0 일 때는 런타임 에러가 발생하므로, onStage != 0 일 때에만 진행한다 

 

딕셔너리의 value로 정렬하는 법 공부하기 

sorted_value = sorted(fail.items(), key = lambda x : x[1], reverse = True)

#print(sorted_value)
[(4, 1.0), (1, 0.0), (2, 0.0), (3, 0.0)]

 

- 정답 풀이 :

def solution(N, stages):
    answer = []
    #해당 스테이지에 있는 유저 수 
    onStage = len(stages)
    fail = {}
    
    for i in range(1, N + 1):
        fail[i] = 0 
    
    for i in range(1, N + 1):
        count = 0 
        for j in range(len(stages)):
            #i 스테이지 못 깬 사람 수 구하기 
            if stages[j] == i:
                count += 1
        #이거 추가해야 런타임 에러 발생하지 않는다 
        if onStage != 0:                
            fail[i] += (count / onStage)
            onStage -= count
        
    sorted_value = sorted(fail.items(), key = lambda x : x[1], reverse = True)
    
    for i in sorted_value:
        answer.append(i[0])
        
    return answer

+ Recent posts