코드
import sys
from itertools import combinations
input = sys.stdin.readline
n = int(input())
l = list(range(0, n))
s = [list(map(int, input().split())) for _ in range(n)]
teams = list(combinations(l, n//2))
ans = 100*n*n
for team in teams:
t1 = 0
t2 = 0
for i in team:
for j in team:
t1 += s[i][j]
team2 = [x for x in range(n) if x not in team]
for i in team2:
for j in team2:
t2 += s[i][j]
if ans > abs(t1-t2):
ans = abs(t1-t2)
print(ans)
결과
풀이 방법
- 조합을 사용하여 팀을 나누고 각 팀의 능력치 합 차이를 비교하였다.
- 조합을 쉽게 구해주는 파이썬의 itertools.combinations 라이브러리와 A팀을 제외한 다른 팀(B팀)을 구하기 위해 not in 문을 활용한 코드이다.