[코테 스터디] 정렬, 실패율

SSO·2022년 4월 27일
0

알고리즘

목록 보기
25/48

Q25. 실패율

🐣문제

실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다.


(스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수) / (스테이지에 도달한 플레이어 수)


전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.


프로그래머스 링크 | https://programmers.co.kr/learn/courses/30/lessons/42889

🐥풀이

스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수:
stage 배열에 주어진 해당 스테이지의 개수


스테이지에 도달한 플레이어 수:
(전체 플레이어 수) - (이전 스테이지까지 도달한 플레이어 수)


위의 두 식으로 실패율을 계산하고, 실패율 기준 내림차순으로 정렬한다.
정렬한 배열에서 스테이지 번호를 차례로 출력한다. 끝!

🐓코드

def solution(N, stages):

    fail, arrive, failure, result = [0]*(N+1), [0]*(N+1), [], []
    
    for i in range(1,N+1):
    	# 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
        fail[i] = stages.count(i)
        
        # 스테이지에 도달한 플레이어 수
        arrive[i] = len(stages)-sum(fail[:i])
    
    # 실패율 계산 ([실패율, 스테이지 번호]로 append)
    for i in range(1, N+1):
        if arrive[i]==0: # 통과한 사람 없음
            failure.append([0,i])
        else:
            failure.append([fail[i]/arrive[i], i])

	# 실패율 기준으로 내림차순 정렬
    for p in sorted(failure, key=lambda x:x[0], reverse=True):
        result.append(p[1])

    return result

⭐2022.04.27

"스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수"를 잘못 이해해서 헤맸던 문제 하하!

profile
쏘's 코딩·개발 일기장

0개의 댓글