티스토리 뷰
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
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
answer = int(1e9)
#팀의 능력치 비교
def compare(team1, team2):
sum_team1 = 0
sum_team2 = 0
for i in range(N//2-1):
for j in range(i+1,N//2):
sum_team1 += arr[team1[i]][team1[j]] + arr[team1[j]][team1[i]]
sum_team2 += arr[team2[i]][team2[j]] +arr[team2[j]][team2[i]]
return abs(sum_team1 - sum_team2)
def select(team1, count, idx):
global answer
#link팀 뽑기
if count == N//2:
team2 = []
for i in range(N):
if i not in team1:
team2.append(i)
diff = compare(team1, team2)
#기존값과 비교하여 더 작은 값이 answer
answer = min(answer, diff)
return
#start팀 찾기
for i in range(idx, N):
if i not in team1:
team1.append(i)
select(team1, count+1, i+1)
team1.remove(i)
select([], 0, 0)
print(answer)
1. DFS를 이용하여 첫 번째 팀을 선택해주고
2. n/2 명이 선택되면 나머지를 두 번째 팀으로 정해준다
3. 팀의 능력치를 비교하고 능력치의 차를 반환한다.
4. 최솟값과 비교해준 후 더 작으면 교체
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SEB43기
- 감정일기장
- 프리프로젝트
- 그리디 알고리즘
- 기술면접
- Python
- 프로그래머스
- 코테
- SEB 43
- 개인 프로젝트
- React quill
- Redux
- useContext
- 회고
- 프로젝트
- seb
- 인적성
- 감정 일기장
- dictionary
- SEB43
- SEB 43기
- 다이나믹 프로그래밍
- 프론트엔드
- BFS
- 코드스테이츠
- 스택오버플로우
- 백준
- dfs
- til
- 브루드포스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함