쓰고싶은거 써요
백준 14889 파이썬 스타트와 링크 본문
백준 링크: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
dfs로 풀려했었는데 이해가 잘 안됐었다. 특히 예제 2번 6을 입력받았을떄 어떻게 해야하나 걱정했었는데
그냥 모든 조합을 구하면 되는거였다.
dfs로 visit 값을 구하면서 cnt가 만약 n//2값이 된다면 이중 for문을 작동시켜서 서로 짝일 경우에
start와 link 따로 계산해서 abs(start-link) (절대값)으로 계산했다.
n=int(input())
matrix=[]
for i in range(n):
matrix.append(list(map(int,input().split())))
visited=[0 for i in range(n)]
result=[]
min_result=1000000000
def dfs(idx,cnt):
global min_result
if cnt == (n//2):
start,link = 0,0
for i in range(n):
for j in range(n):
if visited[i] == 1 and visited[j] == 1:
start += matrix[i][j]
elif visited[i] == 0 and visited[j] == 0:
link += matrix[i][j]
min_result = min(min_result, abs(start-link))
for i in range(idx,n):
if visited[i] == 0:
visited[i] = 1
dfs(i+1 , cnt + 1)
visited[i] = 0
dfs(0,0)
print(min_result)
만약 n == 4 일 경우의 수
첫번째 [1,1,0,0] 의 경우
matrix[0][1] , matrix[1][0] 이 짝
matrix[2][3], matirx[3][2] 이 짝
n == 6 일 경우
첫번째 [1,1,1,0,0,0] 의 경우
matrix[0][1] , matrix[1][0], matrix[0][2], matrix[2][0] 이 짝
matrix[3][4], matirx[4][3], matrix[3][5], matrix[5][3] 이 짝
따로 다 더하고 빼주면 끝
'백준 python 기록' 카테고리의 다른 글
백준 파이썬 2606 바이러스 (0) | 2021.10.24 |
---|---|
백준 파이썬 1260 DFS와 BFS (0) | 2021.10.24 |
백준 파이썬 2529 부등호 (0) | 2021.10.18 |
백준 10816 숫자 카드 2 (0) | 2021.10.17 |
백준 10971 파이썬 외판원 순환2 (0) | 2021.10.14 |
Comments