defsolution(N, stages): fail=[] remain=len(stages) for i in range(N): if remain!=0: p=stages.count(i+1) fail.append((i+1,p/remain)) remain-=p else: fail.append((i+1,0)) return list(map(lambda x:x[0],sorted(fail,reverse=True,key=lambda x:x[1])))
print(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]))
주어진 stages 배열을 정수를 증가시키면서 count를 세고 적절히 fail 배열에 집어넣고, 정렬하면 된다.
정렬된 배열을 리턴하는 부분이 꽤 복잡한데, 실패율(인덱스 1)을 기준으로 내림차순 정렬 후 스테이지 번호(인덱스 0)를 리스트로 반환한다.
이 문제는 전에 풀었던 문제인데, 코드가 너무 더러운 것 같아 다시 풀었다. 이전 코드는
1 2 3 4 5 6 7 8 9 10
defsolution(N, stages): a=[] cur=len(stages) for i in range(N): if cur!=0: a.append(stages.count(i+1)/cur) cur-=stages.count(i+1) else: a.append(0) return list(map(lambda x:x+1,sorted(range(len(a)),key=a.__getitem__, reverse=True)))