문제풀이/구현

[파이썬] [구현] 백준 14889 스타트와 링크

승무_ 2023. 3. 17. 15:38

문제

https://www.acmicpc.net/problem/14889

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net

코드

import sys
from itertools import combinations

n=int(input())
array=[list(map(int, input().split())) for _ in range(n)]

com=list(combinations(range(n),n//2))

result=sys.maxsize
for start in com:
    # 조합으로 start팀을 구한후, 차집합을 통해 link팀 구함
    link=set(range(n)).difference(set(start))

    teamStart=0
    teamLink=0
    for a,b in list(combinations(start,2)):
        teamStart+=array[a][b]
        teamStart+=array[b][a]
    for a,b in list(combinations(link,2)):
        teamLink+=array[a][b]
        teamLink+=array[b][a]
    result=min(result,abs(teamStart-teamLink))

print(result)