https://school.programmers.co.kr/learn/courses/30/lessons/42889
2019 KAKAO BLIND RECRUITMENT
def solution(N, stages):
answer = [i for i in range(1, N+1)]
failure_rate = []
for n in range(1, N+1):
target_user = 0
fail_user = 0
for s in stages:
if s >= n:
target_user += 1
if s == n:
fail_user += 1
try:
failure_rate.append(fail_user/target_user)
except:
failure_rate.append(0)
return [a for f, a in sorted(zip(failure_rate, answer), key=lambda x:(-x[0], x[1]))]
실패율로 먼저 내림차순 정렬하고, 그걸 스테이지 단계로 다시 오름차순 정렬하는 법을 몰라서 오래 걸렸다.
결국 혼자 못 풀고 정렬 방법을 검색해봤음
return에 key=lambda x:(-x[0], x[1])
이게 튜플의 첫 번째 원소는 내림차순, 두 번째 원소는 오름차순으로 정렬하겠다는 뜻
타인 코드
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)
이 분은 튜플말고 딕셔너리를 사용하셨다.
이렇게 딕셔너리를 사용하면 스테이지 단계와 실패율을 한 번에 넣을 수 있어서 더 좋은 것 같다.