[프로그래머스 파이썬] 실패율

일단 해볼게·2024년 2월 2일
0

프로그래머스

목록 보기
95/106

https://school.programmers.co.kr/learn/courses/30/lessons/42889?language=python3

def solution(N, stages):
    answer = []
    
    ratio = {} # sorting위해 dictionary로 선언  
    # 전체 플레이어 수 > 스테이지 지날수록 줄어든다
    allPlayer = len(stages) 
    
    for i in range(1, N + 1):
        if allPlayer == 0: # 스테이지에 도달한 플레이어 수가 0명일 때 
            ratio[i] = 0
        else:
            # stages.count(i) = '현재' 스테이지에 도달한 플레이어 수
            ratio[i] = stages.count(i) / allPlayer 
            allPlayer -= stages.count(i) # 현재 스테이지에 멈춘 숫자만큼 제외
        
    # value 기준으로 정렬 후 key 저장
    answer = sorted(ratio, key = lambda x : ratio[x], reverse=True)

    return answer
  • 현재 스테이지에 도달한 플레이어 수로 실패율을 구하고 전체 인원에서 현재 스테이지에 도달한 플레이어 수를 뺀다.
  • sorted(ratio, key = lambda x : ratio[x], reverse=True)에서 ratio는 ratio.keys()와 같다. ratio[x]는 values를 기준으로 정렬하는 것과 같다.

시간초과 코드

def solution(N, stages):
    # N = 스테이지 개수
    answer = []
    
    for i in range(N):
        user_num = 0 # 스테이지에 도달한 플레이어 수
        fail_user = 0 # 스테이지에 도달했지만 실패한 플레이어 수
        
        for stage in stages:
            if stage >= i + 1:
                user_num += 1 
                
                if stage == i + 1:
                    fail_user += 1
        
        if fail_user == 0: # 스테이지에 도달한 유저가 없는 경우 실패율 = 0
            answer.append([i + 1, 0])    
        else:
            answer.append([i + 1, fail_user / user_num])
    
    # 실패율 내림차순, 실패율이 같으면 작은 번호의 스테이지 먼저
    answer = sorted(answer, key = lambda x : (-x[1], x[0])) 
    dic = dict(answer)
    
    keys_only = list(dic.keys())
    return keys_only

테스트케이스 22번 하나를 통과하지 못했다. 이중 for문 및 정렬 후 키를 뽑아내는 과정에서 시간이 오래 걸린 것 같다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글