이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라.
- 실패율은 다음과 같이 정의한다.
- 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.
제한사항
- 스테이지의 개수 N은 1 이상 500 이하의 자연수이다.
- stages의 길이는 1 이상 200,000 이하이다.
- stages에는 1 이상 N + 1 이하의 자연수가 담겨있다.
- 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다.
- 단, N + 1 은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.
- 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.
- 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
def solution(N, stages):
answer={}
arys1 = [0] * (N + 1)
arys2 = [0] * (N + 1)
for i in range(1,N + 1): # 1부터 시작하는 이유는 이후 dict에 스테이지 값을 주기 위해서
for j in stages:
if j == i: # 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
arys1[i-1] += 1
if j >= i: # 스테이지에 도달한 플레이어 수
arys2[i-1] += 1
if arys2[i-1] == 0: i번째 스테이지에 도달한 사람이 없을때
answer[i] = 0 # 딕셔너리에 실패율 = 0
else:
answer[i] = arys1[i-1] / arys2[i-1] # 실패율 계산 후 dict에 저장
answer = sorted(answer.keys(), reverse=True, key=lambda x: answer[x])
# 실패율을 기준으로 key값 정렬
return answer
'2021 파이썬 챌린지' 카테고리의 다른 글
2021.07 30 30일차 문제 예시답안 (0) | 2021.07.31 |
---|---|
2021.07.30 30일차 문제 (0) | 2021.07.30 |
2021.07.29 29일차 문제 (0) | 2021.07.29 |
2021.07.28 28일차 문제 예시답안 (0) | 2021.07.29 |
2021.07.28 28일차 문제 (0) | 2021.07.28 |