풀이.
파이썬의 내장 라이브러리 itertools의 combinaition으로 조합을 구하여서
쉽게 해결할 수 있다. 또한 주의 하여야할 점이 팀에 구성멤버가 3명이상 넘어가면 각각의 멤버들의 조합에 대한 능력치들을 모두 구하여서 더해주어야한다.
소스코드.
import sys
import itertools
def calc(comb, stats):
# start팀과 link 팀 나누기
start = comb[0:len(comb)//2]
link = comb[len(comb)//2:]
link.reverse()
result = 10000
for s, l in zip(start, link):
sc = itertools.combinations(s, 2)
lc = itertools.combinations(l, 2)
s_score = 0
l_score = 0
for i, j in zip(sc, lc):
s_score += stats[i[0]][i[1]] + stats[i[1]][i[0]]
l_score += stats[j[0]][j[1]] + stats[j[1]][j[0]]
score = abs(s_score - l_score)
if score == 0:
return 0
elif score < result:
result = score
return result
N = int(sys.stdin.readline())
com = [i for i in range(N)] # 0~N까지 요소를 가지는 리스트 생성
stats = [] # 능력치를 저장할 리스트
for i in range(N):
# 능력치 입력받기
s = list(map(int, sys.stdin.readline().split()))
stats.append(s)
comb = itertools.combinations(com, N//2) # N//2의 조합 생성
print(calc(list(comb), stats))
'프로그래밍 > 백준' 카테고리의 다른 글
백준 11279 최대힙 - 파이썬 (0) | 2021.07.09 |
---|---|
백준 14888 연산자 끼워넣기 - 파이썬 (0) | 2021.07.09 |
백준 1541 잃어버린 괄호 - 파이썬 (0) | 2021.07.08 |
백준 11399 ATM - 파이썬 (0) | 2021.07.08 |
백준 1931 회의실 배정 - 파이썬 (0) | 2021.07.08 |