![article thumbnail image](https://blog.kakaocdn.net/dn/b59aOT/btrpwPAmbqz/C8fdBIMfetGIOrQdXJPK00/img.png)
반응형
문제
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
풀이
문제의 상황, 주어지는 입력의 크기, 제한 시간을 모두 고려해보면 완전 탐색을 이용하여 문제 풀이가 가능함을 알 수 있습니다.
따라서 아래와 같은 로직으로 간단하게 문제를 풀이할 수 있습니다.
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 |