14889 - 스타트와 링크*

2022. 5. 3. 14:002022/BaekJoon_삼성 SW 역량 테스트 기출

def abilityDiff(visited):
    global min_diff
    link, start = 0, 0
    # i 와 j를 모두 돌면서 ij와 ji 능력치의 모든 합을 구핳 수 있음
    for i in range(N):
        for j in range(i, N):
            if visited[i] and visited[j]:
                start += (graph[i][j]+graph[j][i])
            elif not visited[i] and not visited[j]:
                link += (graph[i][j]+graph[j][i])
                
    min_diff = min(min_diff, abs(start-link))
    return min_diff
                
            
# 회귀함수 사용 여부의 기준은 N/2명이 link, start에 배정이 되었는지
# link와 start에 학생들을 각각 배정해서 능력치의 차를 구해야함
def dfs(depth, idx):
    if depth == int(N//2):
        min_diff = abilityDiff(visited)
        return 
    else:
        for i in range(idx, N):
            if not visited[i]:
                visited[i] = True
                dfs(depth+1, i+1)
                visited[i] = False
            
N = int(input())
graph = []
for _ in range(N):
    j = list(map(int, input().split()))
    graph.append(j)
    
min_diff = int(1e9)
visited = [False for _ in range(N)]
dfs(0,0)
print(min_diff)

'2022 > BaekJoon_삼성 SW 역량 테스트 기출' 카테고리의 다른 글

16236 - 아기상어*  (0) 2022.05.03
14890 - 경사로*  (0) 2022.05.03
14888 - 연산자 끼워넣기  (0) 2022.05.03
14503 - 로봇청소기*  (0) 2022.05.03
14502 - 연구소*  (0) 2022.05.03