1+ ## 틀린 풀이 ##
2+
3+ from itertools import combinations
4+ from math import comb
5+
6+ cards = [i for i in range (1 , 11 )] * 2 # 20장의 카드 리스트 구성 (1~10 2장씩)
7+
8+ def judge (card1 , card2 ):
9+ # 땡: 두 카드가 같을 경우
10+ if card1 == card2 :
11+ return f"{ card1 } 땡"
12+
13+ # 끗: 땡이 아닐 경우 두 카드의 합을 10으로 나눈 나머지
14+ else :
15+ sum_value = (card1 + card2 ) % 10
16+ return f"{ sum_value } 끗"
17+
18+ # 족보 우선순위 설정 (높은 족보일수록 더 높은 값)
19+ rank_order = {f"{ i } 땡" : 10 - i for i in range (1 , 11 )}
20+ rank_order .update ({f"{ i } 끗" : - i for i in range (10 )}) # 끗 족보는 숫자가 클수록 강하지만 땡보다는 약함
21+ # 끗 족보에는 음수를 사용해 낮은 값을 할당하여, 땡 족보보다 낮은 순위로 설정
22+
23+ def win_probability (y_card1 , y_card2 ):
24+ win_count = 0
25+ total_count = 0
26+
27+ y_rank = rank_order [judge (y_card1 , y_card2 )] # 영학이의 족보
28+
29+ # 상대방이 2장을 뽑는 모든 경우의 수
30+ for opp_card1 , opp_card2 in combinations (cards , 2 ):
31+
32+ remaining_cards = cards .copy ()
33+ remaining_cards .remove (opp_card1 )
34+ remaining_cards .remove (opp_card2 )
35+
36+ opp_rank = rank_order [judge (opp_card1 , opp_card2 )] # 상대방의 족보
37+
38+ total_count += 1
39+
40+ if y_rank > opp_rank : # 영학이가 이기는 경우의 수
41+ win_count += 1
42+
43+ probability = win_count / total_count
44+ return f"{ probability :.3f} " # 소수점 셋째 자리까지 출력
45+
46+ y_card1 , y_card2 = map (int , input ().split ())
47+ print (win_probability (y_card1 , y_card2 ))
48+
49+ # print(win_probability(1, 1)) # 0.941
50+ # print(win_probability(1, 2)) # 0.275
51+ # print(win_probability(1, 9)) # 0.000
52+ # print(win_probability(10, 10)) # 1.000
0 commit comments