programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
from collections import Counter
def solution(N, stages):
fail = [0] * (N+1)
clients = len(stages)
counter = Counter(stages)
for i in range(1, N+1):
count = counter[i]
if clients:
fail[i] = count / clients
clients -= count
result = []
for idx, v in enumerate(fail[1:], start=1):
result.append([idx, v])
result = sorted(result, key=lambda x: (-x[1], x[0]))
return [r[0] for r in result]
이 문제를 풀기 위해서는, 각 스테이지의 실패율을 구해야 한다.
우선, 필요한 변수를 설정하자.
각 스테이지의 실패율을 담는 배열 fail,
유저의 수 clients,
각 스테이지에 멈춰있는 유저의 수를 담는 counter
혹시 collections 모듈의 Counter 클래스 사용법을 모른다면, 검색해서 이해하는 것을 추천한다.
스테이지는 1 부터 N 까지의 수로 구성되어 있으므로, 해당 조건을 이용해 for문을 돌린다.
for문에서 주의해야할 점은 다음과 같다.
- 0으로 나누는 에러를 방지하기 위해서 if clinets: 조건문 추가
- 매번 유저의 수를 빼줘야 다음 스테이지의 실패율을 구할 수 있다.
이제 모든 스테이지의 실패율을 구했으니, 적절한 정렬 조건을 추가해 마무리 하면 된다.
- fail 의 0번 인덱스는 쓰지 않는 값이기 때문에 fail[1:] 을 사용한다.
- 각 스테이지는 1번 부터 시작하기 때문에 enumerate 의 시작을 1로 설정한다.
- 실패율을 기준으로 내림차순 정렬한다. 단, 실패율이 같을 경우 작은 숫자가 앞으로 온다.
- 정렬을 마친 result 는 [숫자, 실패율] 로 구성되어 있는데, 우리는 숫자만 필요하므로 리스트 컴프리헨션을 이용해 숫자만 추출한다.
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스-Level 2] 멀쩡한 사각형_파이썬 ❌ (0) | 2021.04.09 |
---|---|
[프로그래머스-Level 2] 스킬트리_파이썬 (0) | 2021.04.09 |
[프로그래머스-Level 1] 소수 만들기_파이썬 (0) | 2021.04.08 |
[프로그래머스-Level 1] 최대공약수와 최소공배수 ❌⭕ (0) | 2021.04.08 |
[프로그래머스-Level 1] 키패드 누르기_파이썬 ❌⭕ (0) | 2021.04.07 |