[BOJ] Q14889 스타트와 링크

Question

Language: Python

Difficulty: Silver 2

n 명이 있을 때, 이를 두개의 팀으로 분리하였을 때의 전력차를 최소화하는 문제이다.

해당 문제는 python의 combinations을 이용해서 풀 수 있다. combinations을 이용해서 n명에서 n/2 명을 골라낸 모든 조합에 대해 전력차를 비교하면 된다.

Solution

from math import inf
from itertools import combinations

def solution():
    persons=[i for i in range(num)]
    result=inf
    for combination in list(combinations(persons,num//2)):
        start=list(combination)
        link=list(set(persons)-set(combination))

        start_power=0
        for i in start:
            for j in start:
                if i==j:
                    continue
                start_power+=graph[i][j]

        link_power=0
        for i in link:
            for j in link:
                if i==j:
                    continue
                link_power+=graph[i][j]
        
        result=min(result,abs(start_power-link_power))


    print(result)
if __name__ == "__main__":
    num=int(input())
    graph=[list(map(int,input().split())) for _ in range(num)]
    
    solution()

댓글남기기