[백준 문제] 15661번 링크와 스타트 (파이썬)


[백준 문제] 15661번 링크와 스타트 (파이썬)

[백준 문제] 15661번 링크와 스타트를 풀어본다.

의식의 흐름

  1. 스타트와 링크 문제는 팀을 딱 반반 나눴어야했는데 이 문제는 1명만 되도 됨.
  2. 그렇다면 그냥 try except로 싹 다 for문을 돌리면 되겠다라는 생각
  3. 결과는 성공적. 편안함

# intertools 패키지로 조합 구하기 위함
from itertools import combinations
import sys

# 멤버들의 index 리스트화
n = int(sys.stdin.readline())
member_lst = list(i for i in range(n))

# 점수 매트릭스 만들기
score_map = []
for _ in range(n) :
    score_map.append(list(map(int, sys.stdin.readline().split())))

# 팀으로 나누기 위한 조합을 구함 전체 멤버에서 반으로 가를 수 있는 리스트

ans = 10**8

for i in range(1, int((n/2)+1)) :
    member_divide = combinations(member_lst, i)
    min_diff = 10**8

    for x in member_divide :
        start_lst = list(x)
        link_lst = list(set(member_lst) - set(start_lst))
        start_all_sum = 0
        link_all_sum = 0
        for j in range(n-1):
            for k in range(n-1):
                try :
                    start_sum = score_map[start_lst[j]][start_lst[k]]
                except IndexError:
                    start_sum = 0
                try :
                    link_sum = score_map[link_lst[j]][link_lst[k]]
                except IndexError:
                    link_sum = 0
                start_all_sum += start_sum
                link_all_sum += link_sum

        diff = abs(start_all_sum - link_all_sum)
        min_diff = min(min_diff, diff)
    ans = min(ans, min_diff)

print(ans)





© 2018. by statssy

Powered by statssy