Lv3 프로그래머스(Programmers)[Python][파이썬] 주사위 고르기

# 풀이 과정
from itertools import combinations, product
from collections import deque, Counter

# 각각의 주사위의 모든 경우의 수를 구한 후 승패 비교후 A가 이긴 걸 고르기!
def num(A, B):
A_num = []
B_num = []
for i in range(len(A)):
c = len(A_num)
for j in range(len(A[i])):
if i == 0:
A_num.append(A[i][j])
B_num.append(B[i][j])
else:
for d in range(c):
v = A_num[d]
w = B_num[d]
new_v = v + A[i][j]
new_w = w + B[i][j]
A_num.append(new_v)
B_num.append(new_w)

A_num = deque(A_num)
B_num = deque(B_num)

for e in range(c):
A_num.popleft()
B_num.popleft()

return Counter(A_num), Counter(B_num)


def solution(dice):
d = [i for i in range(len(dice))] # 주사위 번호
# d_num=[j for j in range(len(dice[0]))]#주사위 면 번호
k = deque(list(combinations(dice, len(dice) // 2))) # A의 주사위
# dice_num=list(product(d_num,repeat=len(dice)//2)) # 뽑는 주사위 면 순서
check = [] # 이긴 주사위 모음
result = [] # 이긴 주사위 번호
check_num = []
rate = 0

while k:
A = list(k.popleft())
B = []
A_num = [] # a주사위에서 나오는 모든 수
B_num = [] # b주사위에서 나오는 모든 수

# b 주사위 구하기
for b in dice:
if not b in A:
B.append(b)

# a,b의 숫자 모음
A_num, B_num = num(A, B)
win = 0
for a in A_num:
for b in B_num:
if a > b:
win += (A_num[a] * B_num[b])

if win > rate:
rate = win
check = A

for r in check:
t = dice.index(r)
result.append(t + 1)

return result