Programmers Hash失敗率
2963 ワード
[2019 KAKAO BLIND RECRUITMENT]失敗率
問題の説明:
スーパーゲーム開発者のオレリーは大きな悩みに陥った.彼女が作ったブランド「呉天成」は大きな成功を収めたが、最近は新しいユーザーの数が激減している.なぜなら、新しいユーザーと既存のユーザーの間の舞台の違いが大きすぎるからです.
どうすればいいか悩んだ彼女は、ゲームの時間を動的に増やして難易度を調整することにした.やはりスーパー開発者であり、ほとんどのロジックは実現しやすいが、失敗率を探す部分で危機に陥っている.オレリーの失敗率を求めるコードを完了します.
失敗率は次のように定義されます.
ステージに到着しても空になっていないプレイヤー数/ステージに到着したプレイヤー数
現在停止しているステージ番号を含む配列フェーズをパラメータとして指定した場合は、失敗率の高いステージからステージ番号を含む配列を降順に返すように、ソルバを完了します.
せいげんじょうけん
I/O例
N stages result
5 [2, 1, 2, 6, 2, 4, 3, 3][3,4,2,1,5]
4 [4,4,4,4,4][4,1,2,3]
例の説明
1番ステージには8人のユーザーが挑戦し、そのうち1人のユーザーはまだ通関していない.そのため、1番ステージの失敗率は以下の通り.
1ステージ失敗率:1/8
第2ステージには7人のユーザーが挑戦し、そのうち3人のユーザーはまだ通関していない.そのため、2番目の舞台の失敗率は以下の通りです.
フェーズ2失敗率:3/7
同様に、残りの舞台の失敗率は以下の通りである.
フェーズ3失敗率:2/4
フェーズ4失敗率:1/2
フェーズ5失敗率:0/1
各ステージの番号を失敗率の降順に並べます.
正解:[3,4,2,1,5]
Code
def solution(N, stages):
#도달한 최종 스테이지당 인원 수 나타내는 dict
arv_dic = {id: 0 for id in range(1,N+2)}
#해당 스테이지를 통과한 모든 인원 수 dict
stay_dic = {}
#각각 스테이지를 돌면서 arv_dic에 최종 스테이지에 인원 수 저장
for x in stages:
arv_dic[x] += 1
fail_dic = {}
temp = len(stages)
#스테이지 1부터 N까지 돌면서 해당 스테이지를 통과했는지 차례로 stay_dic 에 저장
for i in range(1,N+1):
stay_dic[i] = temp
temp -= arv_dic[i]
if stay_dic[i] == 0: #만약 해당 스테이지 통과자가 없다면 0으로 저장, (0으로 나눌 수는 없음)
fail_dic[i] = 0
else:
fail_dic[i] = (arv_dic[i]/stay_dic[i]) #실패확률을 스테이지별로 fail_dic에 저장
# 실패확률이 높은 순서대로 리스트 형태로 정답을 return. (만약 실패확률이 같다면, 낮은 스테이지 부터 저장해줌)
return sorted(fail_dic, key = lambda x:(-fail_dic[x],fail_dic))
コード解析
2-1. 失敗確率をフェーズ別にfail dicに格納します.
2-2. 該当するステージ通過者がいなければ0に保存されます.(0に分けられない)
Output & Screen Shot
より良いコード
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)
*출처 프로그래머스 정답들 중
説明:
count()関数を使用して、リストに対応する数をいくつか求めます.私が書いたコードの考え方と似ていますが、コードの複雑さが減少し、簡潔性と効率が大幅に向上しました.後でリストにcount()関数を使用して記述します.
Reference
この問題について(Programmers Hash失敗率), 我々は、より多くの情報をここで見つけました https://velog.io/@kakasi18/ProgrammersHash실패율テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol