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문 및 정렬 후 키를 뽑아내는 과정에서 시간이 오래 걸린 것 같다.