자료구조&알고리즘

[Python] 백준 - 스타드와 링크 14889

두잇 두두 2024. 4. 2. 23:16
728x90

배경

https://www.acmicpc.net/problem/14889

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net

 

 

코드

def DFS(L, idx):
    global res
    if L==n//2:
        A=0
        B=0
        for i in range(n):
            for j in range(n):
                if visited[i] and visited[j]:
                    A += board[i][j]
                elif not visited[i] and not visited[j]:
                    B += board[i][j]
        res=min(res, abs(A-B))
        return
    for i in range(idx, n):
        visited[i]=True
        DFS(L+1, i+1)
        visited[i]=False
            

n=int(input())
board=[list(map(int,input().split())) for _ in range(n)]
visited = [0] *n
res = 2147000000
DFS(0,0)
print(res)

 

 

설명

N-Queen과 마찬가지로 visited[i]를 사용해서 해당 열의 index를 모두 순회해줍니다

L이 총 인원수의 //2배가 되면 체크를 시작합니다

해당 자신과 팀원이 같은 팀(True)라면 board에 더해주면서 체크하시면 됩니다

 

 

배운 점