알고리즘/프로그래머스

[프로그래머스 | Lv1] 실패율 (Python) - 2019 KAKAO BLIND RECRUITMENT

sssbin 2023. 1. 26. 18:45

 

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

 

프로그래머스

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

programmers.co.kr

 

처음엔 for문을 돌리면서 도달과 클리어 개수를 하나하나 세서 계산했다.

하지만 한 문제에서 시간 초과가 떴고, 다시 문제를 보면서 규칙을 찾아냈다.

 

각 스테이지에 도달한 플레이어의 수는 전 스테이지를 클리어한 플레이어 수와 같고,

어차피 위의 과정에서 도달하지 못한 플레어어의 수는 걸러지기 때문에 스테이지에 도달했지만 클리어하지 못한 플레이어의 수는 stages에서 해당 숫자(+1)의 count와 같다.

 

딕셔너리를 만들어 각 스테이지 별로 실패율을 저장해주고 정렬한 인덱스를 반환했다.

 

# 프로그래머스 42889: 실패율 (2019 KAKAO BLIND RECRUITMENT)

import numpy

def solution(N, stages):
    answer = {}
    
    arrive = [0 for i in range(N)]
    stay = [0 for i in range(N)]

    arrive[0] = len(stages)
    stay[0] = stages.count(1)
    answer[1] = stay[0] / arrive[0]
    

    for i in range(1, N):
        arrive[i] = arrive[i-1] - stay[i-1]
        stay[i] = stages.count(i+1)

        if arrive[i] == 0:
            answer[i+1] = 0
        else:
            answer[i+1] = stay[i] / arrive[i]

    answer = list(dict(sorted(answer.items(), key=lambda x:x[1], reverse=1)).keys())
    
    return answer