def solution(N, stages):
try_dict = dict()# k: 스테이지 v : (성공 횟수, 시도횟수)
for i in range(1, N+1):
try_dict[i] = (0, 0)
for stage in stages:
for i in range(1, stage + 1):
if i == N + 1:
continue
if i == stage:
existed_val = try_dict[i]
try_dict[i] = (existed_val[0], existed_val[1] + 1)
else:
existed_val = try_dict[i]
try_dict[i] = (existed_val[0] + 1, existed_val[1] + 1)
for k, v in try_dict.items():
if v[1] == 0:
try_dict[k] = 0
else:
try_dict[k] = v[0] / v[1]
try_dict = {k : v for k, v in sorted(try_dict.items(), key = lambda x : x[1])}
return list(try_dict.keys())
실패했지만, 이 기회에 값을 기준으로 딕셔너리 정렬하는 것 확실하게 정리하자.
def solution(N, stages):
fail_rate_dict = dict()
total_user = len(stages)
for stage in range(1, N+1):
if total_user != 0:
fail_user = stages.count(stage)
fail_rate_dict[stage] = fail_user / total_user
total_user -= fail_user
else:
fail_rate_dict[stage] = 0
return sorted(fail_rate_dict, key=lambda x : fail_rate_dict[x], reverse=True)
문제를 가장 잘 이해하고 잘 푼 문제다. 그저 급하게 풀면 주어진 stage 리스트를 반복문을 돌릴텐데, 이 풀이는 아예 그냥 stage 별로 돌렸다. 그리고 매 단계에서 total_user의 개수를 빼줌으로서 실패율이 말이 되게 만들었다.