코딩테스트 연습 스터디 진행중 입니다. ✍✍✍
Notion : https://www.notion.so/1c911ca6572e4513bd8ed091aa508d67
문제
https://www.acmicpc.net/problem/14889
[나의 풀이]
# PyPy3 용
# combinations 사용
if __name__ == "__main__":
import sys
input = sys.stdin.readline
from itertools import combinations
import math
n = int(input())
S = [list(map(int, input().split())) for _ in range(n)]
people = [i for i in range(1,n+1)]
team_start = []
team_link = []
min_diff = 10*100*2-10*1*2 # 팀간 점수의 최댓값
diff = 0
for team_start in list(list(combinations(people,int(n/2)))):
start_score = 0
link_score = 0
team_link = list(set(people) - set(team_start))
# list() - list()가 안됌. set으로 바꾸어 뺌.
for j in range(0,len(team_start)):
for k in range(j+1,len(team_start)):
start_score += S[team_start[j]-1][team_start[k]-1]
start_score += S[team_start[k]-1][team_start[j]-1]
link_score += S[team_link[j]-1][team_link[k]-1]
link_score += S[team_link[k]-1][team_link[j]-1]
diff = int(abs(start_score - link_score))
if diff == 0:
print(diff)
break
if min_diff >= diff:
min_diff = diff
if diff != 0:
print(min_diff)
[팀원의 풀이1]
def recursiveDef(startCase, currentPeopleNum):
global peopleNum ,currentTeam ,Dif, totalScore
if currentPeopleNum == peopleNum // 2 :
teamScore = 0
for i in range(peopleNum):
if currentTeam[i] :
teamScore += totalScorePerPerson[i]
Dif.append(int(abs(totalScore - teamScore)))
return
for i in range(startCase, peopleNum):
currentTeam[i] = True;
recursiveDef(i+1, currentPeopleNum+1)
currentTeam[i] = False;
return
import sys
peopleNum = int(input())
scoreBoard = [list(map(int,sys.stdin.readline().strip().split())) for _ in range(peopleNum)]
totalScorePerPerson = []
Dif = []
totalScore = 0
for i in range(peopleNum):
scorePerPerson = 0
for j in range(peopleNum):
scorePerPerson += scoreBoard[i][j] +scoreBoard[j][i]
totalScore += scoreBoard[i][j]
totalScorePerPerson.append(scorePerPerson)
currentTeam = [False for _ in range(peopleNum)]
currentTeam[0] = True
recursiveDef(1,1)
minDif = min(Dif)
print(f'{minDif}')