소스 코드

def find(idx,start):
    global res

    # 스타트 팀이 다 채워졌으면
    if len(start) == n//2:

        # 링크 팀 채우기
        link = []
        for e in range(n):
            if e not in start:
                link.append(e)

        # 능력치 합계
        start_score = 0
        for r in range(n//2):
            for rr in range(n//2):
                start_score += board[start[r]][start[rr]]

        link_score = 0
        for t in range(n//2):
            for tt in range(n//2):
                link_score += board[link[t]][link[tt]]

        if abs(start_score-link_score) < res:
            res = abs(start_score-link_score)

        return

    for w in range(idx,n):
        find(w+1,start+[w])

    return

n = int(input())

board = [list(map(int,input().split())) for _ in range(n)]

res = 50000

for q in range(n//2+1):
    # 처음 값을 추가
    find(q+1,[q])

print(res)

 


해결 방법


느낀 점

깔끔하게 작성하지 못해서 아쉽고

 

다른 사람들의 코드를 보니 속도가 훨씬 빨랐음. 가지치기를 제대로 못한듯 하다.

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.