Python | 알고리즘 프로그래머스 실패율

알고리즘 개요

  • 스테이지 별 실패율이 가장 높은 순으로 배열의 형태로 결과 값을 내보낸다.
  • N: 전체 스테이지 수
  • stages: 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열
  • N + 1 은 마지막 스테이지 (N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.
  • 실패율이 같은 경우, 스테이지가 낮은 값이 좀 더 앞에 나와야 한다.

실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

예시

  • N: 5
  • stages: [2, 1, 2, 6, 2, 4, 3, 3]
  • 결과값: [3,4,2,1,5]

스테이지 1 실패율: 1 / 8

스테이지 2 실패율: 2 / 7

스테이지 3 실패율: 3 / 5

스테이지 4 실패율: 1 / 2

스테이지 5 실패율: 0 / 1

풀이

def solution(N, stages):
    length = len(stages)
    result = {}
    for n in range(1, N + 1):
        if n in stages:
            ct = stages.count(n)
            result[n] = ct / length
            length -= ct
        else:
            result[n] = 0
    return [r[0] for r in sorted(result.items(), key = lambda item: item[1], reverse=True)]
  • for문으로 stage 1부터 마지막 스테이지 N까지 실패율을 계산하여 result 객체에 스테이지: 실패율 형태로 값을 담는다. 이후에 set 형태의 값을 담은 list로 변환 되기 때문에 set 형태로 list에 append 해놓아도 괜찮다.
  • length는 실패율을 계산할 때마다 스테이지에 도달한 플레이어 수가 줄어들어 실패율을 계산한 후, 다음 스테이지 실패율을 계산하기 위해 전 스테이지 도달 플레이어 수 만큼 줄인다.
  • 만약 stages 배열에 스테이지 해당 번호가 없는 경우에는 해당 스테이지의 실패율은 0이다.
  • key 매개 변수로 비교할 값을 실패율로 설정한다.
  • key 값을 reverse = True로 내림차순으로 설정한다.
  • 실패율이 같은 경우, key 값이 아닌 item[0]은 오름차순으로 자동 정렬된다.
  • list comprehension을 통해 item[1] 값만 정렬된 배열을 리턴한다.

좋은 웹페이지 즐겨찾기