https://www.acmicpc.net/problem/15661
N=int(input())
s=[list(map(int,input().split())) for _ in range(N)]
answer=1e9
def cal(arr):
sumValue=0
for i in range(len(arr)):
for j in range(i+1,len(arr)):
sumValue+=s[arr[i]][arr[j]]+s[arr[j]][arr[i]]
return sumValue
for i in range(1<<N):
team1,team2=[],[]
for j in range(N):
if (1<<j)&i:
team1.append(j)
else:
team2.append(j)
if team1 and team2:
answer=min(answer,abs(cal(team1)-cal(team2)))
print(answer)
적어도 한 팀에 한 명 이상이 존재하는 모든 부분집합을 구해서 해당 팀의 능력치의 차이를 계산하는 문제이다. 비트 마스킹을 통해서 전체 경우의 수를 for문으로 받은 후, 해당 경우의 비트를 통해 팀원의 존재여부를 확인해주면 된다.
이렇게 Python로 백준의 "링크와 스타트" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊