1+ # 38. 실패율
2+
3+ # 내 풀이
4+ def solution (N , stages ):
5+ answer = []
6+
7+ # 실패율 딕셔너리
8+ result = {}
9+
10+ # 도달한 플레이어 수 ... 매 단계마다 바뀔 수 있다
11+ denominator = len (stages )
12+
13+ for stage in range (1 , N + 1 ):
14+ if denominator != 0 :
15+ fail_cnt = stages .count (stage )
16+ result [stage ] = fail_cnt / denominator
17+ denominator -= fail_cnt
18+ else :
19+ result [stage ] = 0
20+
21+ answer = sorted (result , key = lambda x : result [x ],
22+ reverse = True )
23+ return answer
24+
25+ N_1 = 5
26+ N_2 = 4
27+
28+ stages_1 = [2 , 1 , 2 , 6 , 2 , 4 , 3 , 3 ]
29+ stages_2 = [4 , 4 , 4 , 4 , 4 ]
30+
31+ print (solution (N_1 , stages_1 ))
32+ print (solution (N_2 , stages_2 ))
33+
34+ # 이중 리스트 풀이 ... [2, 1, 2, 6, 2, 4, 3, 3] -> [[1], [2, 2, 2], [3, 3], [4], [6]]
35+ from collections import Counter
36+ def solution_mine (N , stages ):
37+ answer = []
38+
39+ # {'1' : 2, '2' : 3, ... }
40+ result = {str (i ): 0 for i in range (N + 1 )}
41+ for i in stages :
42+ if str (i ) in result .keys ():
43+ result [str (i )] += 1
44+ else :
45+ if i == N + 1 :
46+ result [str (0 )] += 1
47+
48+ # 마지막까지 성공한 사람
49+ success = {'0' : result ['0' ]}
50+ del (result ['0' ])
51+
52+ denominator = len (stages )
53+ failing_rate_lst = []
54+ for stage , cnt in result .items ():
55+ failing_rate = 0
56+ if cnt != 0 :
57+ failing_rate = cnt / denominator
58+ failing_rate_lst .append (failing_rate )
59+ denominator -= cnt
60+ else :
61+ failing_rate = 0
62+ failing_rate_lst .append (failing_rate )
63+
64+ sort_failing_rate_lst = sorted (failing_rate_lst ,
65+ reverse = True )
66+ answer = [sort_failing_rate_lst .index (i ) + 1
67+ for i in failing_rate_lst ]
68+ return answer
69+
70+ # print(solution_mine(N_1, stages_1))
71+ # print(solution_mine(N_2, stages_2))
72+
73+ def solution_best (N , stages ):
74+ answer = []
75+
76+ # 실패율 딕셔너리
77+ result = {}
78+
79+ # 스테이지에 도달한 플레이어 수 = success_players / denominator : 분모
80+ denominator = len (stages )
81+
82+ for stage in range (1 , N + 1 ):
83+ if denominator != 0 :
84+ failing_count = stages .count (stage )
85+ result [stage ] = failing_count / denominator
86+ denominator -= failing_count
87+ else :
88+ result [stage ] = 0
89+ answer = sorted (result , key = lambda x : result [x ], reverse = True )
90+ return answer
91+ #
92+ # print(solution_best(N_1, stages_1))
93+ # print(solution_best(N_2, stages_2))
0 commit comments