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 |
Tags
- 2096 파이썬
- git local remote
- 1753 파이썬
- 투포인터 알고리즘
- Coroutine Flow
- 1644 파이썬
- 1806 투포인터
- 1003 파이썬
- Android mvp
- android hilt
- 백준 10819
- 1806 파이썬
- 1753 다익스트라
- 1806 백준
- 5582 파이썬
- Android Room
- 백준 1644
- 백준 5582
- flow buffering
- 이진 탐색
- 백준 2096
- 코루틴 플로우
- 6588 파이썬
- 자료구조
- 5582 DP
- 10819 파이썬
- 자바
- java
- Jetpack Room
- 안드로이드 hilt
Archives
- Today
- Total
Gemstone's Devlog
[백준] 14889번: 스타트와 링크 (백트래킹) 본문
조합으로 풀 수도 있었지만 백트래킹을 연습하기 위해 다음과 같이 풀었다.
import sys
input = sys.stdin.readline
def backtracking(idx, start):
global min_diff
if idx == number:
start_sum, link_sum = 0, 0
link_team = list(total - set(start_team))
for i in range(number):
for j in range(i+1, number):
start_sum += graph[start_team[i]][start_team[j]] + graph[start_team[j]][start_team[i]]
link_sum += graph[link_team[i]][link_team[j]] + graph[link_team[j]][link_team[i]]
min_diff = min(min_diff, abs(start_sum - link_sum))
return
for i in range(start, n):
if check[i]:
continue
check[i] = True
start_team[idx] = i
backtracking(idx+1, i+1)
check[i] = False
if __name__ == '__main__':
n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]
min_diff = float('Inf')
total = set(range(0, n))
number = n // 2
start_team = [0] * number
check = [False] * n
backtracking(0, 0)
print(min_diff)
'Data Structure & Algorithms' 카테고리의 다른 글
[백준] 1202번: 보석 도둑 (우선순위 큐) (0) | 2022.03.27 |
---|---|
[백준] 1339번: 단어 수학 (그리디) (0) | 2022.03.24 |
[Codeforces] 1285B: Just Eat It! (0) | 2022.03.10 |
[백준] 1932번: 정수 삼각형 (다이나믹 프로그래밍) (0) | 2022.03.02 |
[이것이 코딩테스트다] 효율적인 화폐 구성 (0) | 2022.03.01 |