Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 재귀
- DP
- 오류
- W3Schools
- C#
- 문제풀이
- 기초
- parameter
- UE5
- Unreal Engine 5
- loop
- c++
- dynamic
- Material
- Algorithm
- 파이썬
- Tutorial
- w3school
- 시작해요 언리얼 2022
- dfs
- 백준
- 프로그래밍
- guide
- github
- String
- python
- Class
- Unity
- Programming
- Basic
Archives
- Today
- Total
행복한 개구리
백준 22.01.31. 14889번 - 스타트와 링크 본문


from itertools import combinations
N = int(input())
matrix = [list(map(int, input().split())) for i in range(N)]
teamComb = list(combinations(range(N), N//2))
result = []
for i in range(len(teamComb)//2):
teamS = teamComb[i]
statS = 0
for j in range(N//2):
colS = teamS[j]
for rowS in teamS:
statS += matrix[colS][rowS]
teamL = teamComb[-i-1]
statL = 0
for j in range(N//2):
colL = teamL[j]
for rowL in teamL:
statL += matrix[colL][rowL]
dif = abs(statS - statL)
if dif not in result:
result.append(dif)
print(min(result))
- 팀이 이룰 수 있는 멤버의 조합을 구했을 때, 다른팀은 그 반대되는 조합을 가지는 것을 알 수 있습니다.
- 따라서 combinations를 이용하여 인원의 절반인 수가 한 팀이 될 수 있는 조합을 모두 구해줍니다.
- 이어서 Link팀과 Start팀을 나누어 Start팀이 첫 인덱스부터 탐색을 시작한다면 Link팀은 그 반대로 끝에서부터 역순으로 탐색을 시작합니다.
combinations로 얻은 결괏값을 보면 서로 대칭되는 인덱스의 요소는 중복되지 않습니다.
- 팀 조합을 골라 teamS, teamL로 지정해줍니다
- 조합안에서의 두 선수 조합의 스탯값을 구하기 위해서 teamS에서의 값으로 matrix에서의 row, col값을 인덱스로 할당해줍니다.
- S¡¡ 와 같은 같은 선수가 중복되는 조합의 스탯은 0이므로 굳이 제외하지 않았습니다.
- 고른 팀 조합에서의 모든 선수 조합의 스탯을 더해주고 구한 teamL과 teamS의 스탯을 뺀 절대값을 result에 저장합니다.
- 모두 다 구했다면 result의 최솟값을 출력합니다.
'Algorithm > BaekJoon' 카테고리의 다른 글
| 백준 22.02.05. 9184번 - 신나는 함수 실행 (0) | 2022.02.06 |
|---|---|
| 백준 22.02.01. 1003번 - 피보나치 함수 (0) | 2022.02.01 |
| 백준 22.01.30. 14888번 - 연산자 끼워넣기 (0) | 2022.01.30 |
| 백준 22.01.30. 2580번 - 스도쿠 (0) | 2022.01.30 |
| 백준 22.01.28. 9663번 - N-Queen (0) | 2022.01.28 |