실패율
풀이
문제에서 당연히 zero division이 없을 줄 알았는데, zero division의 경우도 고려해야해서 한 번 실패했다.
코드를 몇 번 수정하다가 도전한건데 쓰읍 아쉽다.
# 오렐리, #실패율은 다음과 같이 정의
# 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 /스테이지에 도달한 플레이어 수
# 총 스테이지 갯수 N
# 사용자가 현재 멈춰있는 스테이지 번호 stages
# 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 retun
# 각 스테이지에 도착했던 모든 수를 책정
# 각 스테이지에 머물러 있는 사람 수
def solution(N, stages):
# 1~N+1까지의 인덱스를 이용하기 위함
stage_contact_number = [0] * (N+2)
stage_fail_number = [0] * (N+2)
stage_orelli = {}
for stage in stages:
stage_contact_number[stage] += 1
stage_fail_number[stage] += 1
# stage_contact_number를 구하기 위해 다음 for문
for i in range(1, N+2):
if i != N+1:
stage_contact_number[i] = sum(stage_contact_number[i:])
# stage_orelli에 비율 기입
for i in range(1, N+1):
if stage_contact_number[i] != 0:
stage_orelli[i] = stage_fail_number[i] / stage_contact_number[i]
else:
stage_orelli[i] = 0
value = sorted(stage_orelli, key= lambda x:stage_orelli[x], reverse = True)
return value
다른 사람 풀이
풀이방법은 내가 했던 방법보다 훨씬 간단하다.
denominator를 이용해서 도달한 사람 수를 앞에서부터 실패한 사람만큼 줄이는 방법으로 시도했다.
왜 이 생각을 안했지???? 흐음. 역시 똑똑한 사람들 많다.
def solution(N, stages):
result = {}
denominator = len(stages)
for stage in range(1, N+1):
if denominator != 0:
count = stages.count(stage)
result[stage] = count / denominator
denominator -= count
else:
result[stage] = 0
return sorted(result, key=lambda x : result[x], reverse=True)
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 성격 유형 검사하기 (python) (1) | 2024.02.11 |
---|---|
프로그래머스 Lv1 가장 많이 받은 선물 (python) (1) | 2024.02.10 |
프로그래머스 Lv2 할인 행사(python) (0) | 2024.02.08 |
프로그래머스 Lv2 피로도 (python) (0) | 2024.02.07 |
프로그래머스 Lv2 귤 고르기(python) (0) | 2024.02.06 |