일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- MySQL
- JavaScript
- Data Structure
- 컴퓨터구조
- 알고리즘
- Algorithm
- Kafka
- Spring
- Galera Cluster
- C
- spring webflux
- Proxy
- redis
- 백준
- 자료구조
- JPA
- 파이썬
- OS
- 네트워크
- c언어
- IT
- design pattern
- 운영체제
- 자바
- Heap
- MSA
- 디자인 패턴
- react
- Java
- mongoDB
Archives
- Today
- Total
시냅스
백준 boj 15661 - 링크와 스타트 (파이썬, python) 본문
https://www.acmicpc.net/problem/15661
15661번: 링크와 스타트
첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100
www.acmicpc.net
브루트포스와 백트래킹을 활용하여 풀었다.
가능한 조합을 모두 뽑아줘야 했지만,
시간제약의 관계로 dfs를 돌릴 때 for문을 쓰지 않는 방법으로 접근하였다.
조합을 뽑아 냈으면 start와 link로 나눠 차이를 구하고, 최소값을 갱신해줬다.
code
n = int(input())
stats = [list(map(int, input().split())) for i in range(n)]
visited = [0] * n
ans = 99999
def is_it():
global ans
start, link = 0, 0
for i in range(n):
for j in range(n):
if visited[i] and visited[j]:
start += stats[i][j]
elif not visited[i] and not visited[j]:
link += stats[i][j]
ans = min(ans, abs(start - link))
return
def resolve(iter):
if iter == n:
is_it()
return
visited[iter] = 1
resolve(iter + 1)
visited[iter] = 0
resolve(iter + 1)
resolve(0)
print(ans)
'알고리즘' 카테고리의 다른 글
크루스칼 알고리즘 C언어로 구현 (0) | 2022.06.07 |
---|---|
백준 boj 2529 - 부등호 (파이썬, python) (0) | 2022.03.01 |
백준 boj 14501 - 퇴사 (파이썬, python) (0) | 2022.02.23 |
백준 boj 1759 - 암호 만들기 (파이썬, python) (0) | 2022.02.23 |
백준 boj 15663 - N과 M(9) (파이썬, python) (0) | 2022.02.19 |
Comments