오뚝이개발자

[백준14889] 스타트링크 본문

코딩 테스트/백준

[백준14889] 스타트링크

땅어 2020. 4. 29. 23:29
728x90
300x250

문제


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

 

생각의 흐름


combinations() 메소드를 이용하여 team1의 조합을 구한 뒤 그에 대응되는 team2의 조합을 구해 각 team의 구성원들의 능력치합 sum1, sum2를 구해 차이를 비교해주면 된다. 단순히 "차이"이므로 abs()를 써주어야 한다.

 

코드


# BOJ 14889

import itertools
import sys

n = int(input())
mat = [list(map(int, input().split())) for _ in range(n)]
member = [i for i in range(n)]
gap = sys.maxsize
tt = list(itertools.combinations(member, n//2))
for team1 in tt:
    sum1, sum2 = 0, 0
    team2 = [x for x in member if x not in team1]
    for x, y in (itertools.combinations(team1, 2)):
        sum1 += mat[x][y] + mat[y][x]
    for x, y in (itertools.combinations(team2, 2)):
        sum2 += mat[x][y] + mat[y][x]
    gap = min(gap, abs(sum1-sum2))
print(gap)

 

728x90
300x250

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준1339] 단어 수학  (0) 2020.05.01
[백준1644] 소수의 연속합  (0) 2020.05.01
[백준15990] 1, 2, 3 더하기 5  (0) 2020.04.28
[백준15988] 1, 2, 3 더하기 3  (0) 2020.04.28
[백준1699] 제곱수의 합  (0) 2020.04.28
Comments