티스토리 뷰

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
num_player = int(input())
player_list = [i for i in range(num_player)]
player_ability_list = []
for player in range(num_player):
    player_ability_list.append(list(map(int, input().split())))
 
check_list=[False]*num_player
output=[]
diff = 1000000
 
def diff_set(player_list, team1): # 차집합 구하기
    result = player_list[:]
    for i in player_list:
        for j in team1:
            if i == j:
                result.remove(i)
    return result
 
def ability_check(player_ability_list, num_list):
    total_ability = 0
    for i in num_list:
        for j in num_list:
            total_ability += player_ability_list[i][j]
    return total_ability
 
def combination(count): # 조합 구하기
    global diff
    if count == num_player//2:
        team1 = output
        team2 = diff_set(player_list, team1)
        team1_ability = ability_check(player_ability_list, team1)
        team2_ability = ability_check(player_ability_list, team2)
        diff = min(diff, abs(team1_ability - team2_ability))
        return
 
    for i in range(num_player):
        if check_list[i] == True:
            continue
 
        check_list[i] = True
        output.append(i)
        combination(count+1)
        output.pop()
        for j in range(i+1,num_player):
            check_list[j] = False
 
combination(0)
print(diff)
 
cs

 

 itertools의 combination을 사용하지 않고 직접 코드를 작성해 사용하였다.