문제
https://www.acmicpc.net/problem/14889
풀이
문제의 상황, 주어지는 입력의 크기, 제한 시간을 모두 고려해보면 완전 탐색을 이용하여 문제 풀이가 가능함을 알 수 있습니다.
따라서 아래와 같은 로직으로 간단하게 문제를 풀이할 수 있습니다.
1. combination을 사용하여 사람들을 두 팀으로 나눈다.
2. 두 팀에 대한 점수를 각각 구하고 점수 차이가 현재 답보다 작을 시 갱신한다.
풀이 코드는 아래와 같습니다.
from itertools import combinations as C
N = int(input())
answer = 987654321
people = [i for i in range(N)]
graph = []
for _ in range(N):
graph.append(list(map(int, input().split())))
# 팀 뽑기
for team1 in list(C(people, N // 2)):
team2 = [i for i in people if i not in team1]
# 팀 별 점수 구하기
score1 = 0
score2 = 0
for i in range(N // 2):
for j in range(i + 1, N // 2):
score1 += graph[team1[i]][team1[j]] + graph[team1[j]][team1[i]]
score2 += graph[team2[i]][team2[j]] + graphx[team2[j]][team2[i]]
answer = min(abs(score1 - score2) , answer)
print(answer)
반응형
'Algorithm > 백준' 카테고리의 다른 글
[BOJ] 16987 계란으로 계란치기 - Python (0) | 2022.01.08 |
---|---|
[BOJ] 14712 넴모넴모 - Python (0) | 2022.01.04 |
[BOJ] 1655 가운데를 말해요 - Python (0) | 2021.12.05 |
[BOJ] 2075 N번째 큰 수 - Python (0) | 2021.12.04 |
[BOJ] 1927 최소힙, 11279 최대힙 - Python (0) | 2021.12.02 |