[テストエンコーディング]失敗率
プログラマコードテストの準備
https://programmers.co.kr/learn/courses/30/lessons/42889
質問の説明は次のサイトで確認できます.
ラムダ式と列挙、ディクシャナリーキー、値ソート、カウンタ概念を学ぶことができます.ディクシャナリーでは、キーワードでソートしますが、値でソートするにはランダ式を使うことに気づきました.
https://programmers.co.kr/learn/courses/30/lessons/42889
質問の説明は次のサイトで確認できます.
<私が作成したコード>
def solution(N, stages):
answer = []
fail = []
len_stg = len(stages)
st_max = max(stages)
for i in range(1,st_max):
failcount = 0
for j in range(len(stages)):
if stages[j] == i :
failcount +=1
fail_rate = failcount / len_stg
len_stg -= failcount
answer.append((i,fail_rate))
print(answer)
answer = sorted(answer, key=lambda v: v[1], reverse=True)
answer = [i[0] for i in answer]
return answer
<他人が作成したコード>
from collections import Counter
def solution(N, stages):
failure_p = [] # 실패율을 저장할 배열 (저장되는 형태: [(스테이지 번호, 실패율), (스테이지 번호, 실패율),...]
counter = Counter(stages) # stages에 대한 Counter
keys = sorted(list(counter.keys())) # counter의 key들의 정렬된 배열
items = sorted(counter.items()) # counter의 item들의 정렬된 배열
for n in range(N): # N의 범위(스테이지의 번호 범위)에서
if n+1 not in keys: # keys에 n+1(스테이지 번호)가 없다면 -> 도전자가 없는 스테이지라면
failure_p.append((n+1, 0)) # 이 스테이지 실패율은 0
else: # 도전자가 있다면, 실패율은 현재 스테이지 도전자들 / 현재를 포함한 이후 모든 스테이지의 도전자들(이 스테이지를 통과한 사람들)
failure_p.append((n+1, items[keys.index(n+1)][1] / sum(p for s, p in items[keys.index(n+1):])))
failure_p.sort(key=lambda x:x[1], reverse=True) # 실패율 역순 정렬
return [s for s,p in failure_p] # 실패율 배열에서 스테이지 번호만 뽑아서 반환
🧑🏻 ポスト
ラムダ式と列挙、ディクシャナリーキー、値ソート、カウンタ概念を学ぶことができます.ディクシャナリーでは、キーワードでソートしますが、値でソートするにはランダ式を使うことに気づきました.
Reference
この問題について([テストエンコーディング]失敗率), 我々は、より多くの情報をここで見つけました https://velog.io/@sdj3261/코딩테스트-실패율テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol