알고리즘/프로그래머스
[프로그래머스 | 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