14890 - 경사로*
2022. 5. 3. 14:00ㆍ2022/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 역량 테스트 기출' 카테고리의 다른 글
17144 - 미세먼지 안녕! (0) | 2022.05.03 |
---|---|
16236 - 아기상어* (0) | 2022.05.03 |
14889 - 스타트와 링크* (0) | 2022.05.03 |
14888 - 연산자 끼워넣기 (0) | 2022.05.03 |
14503 - 로봇청소기* (0) | 2022.05.03 |