백준(14889) : 스타트와 링크(python)

지환·2023년 9월 7일
0

백준(python)

목록 보기
30/67

출처 | https://www.acmicpc.net/problem/14889

코드

import sys
n = int(sys.stdin.readline())
graph = [ list(map(int, sys.stdin.readline().split())) for _ in range(n) ]
visit = [ False for _ in range(n) ] #1-1차원으로 방문 리스트 생성
min_value = sys.maxsize #2- 최소값을 갱신할 변수 생성

def backTracking(depth, idx): #3-깊이를 나타내는 변수와 인덱스 변수를 인자로 받아줌
    global min_value
    if depth == n // 2: #4-n은 늘 짝수로 주어진다고 했다. 주어진 수의 절반이 한 팀으로 선택되었을때 가지치기 시작
        power1, power2 = 0, 0
        for i in range(n):
            for j in range(n):
                if visit[i] and visit[j]: #5-True의 값을 가지는 팀을 스타트팀이라 할때 스타트 팀의 능력치를 모두 power1에 더하고
                    power1 += graph[i][j]
                elif not visit[i] and not visit[j]: #6-나머지 절반 False의 값을 가지는 팀을 링크팀이라 할때 링크 팀의 능력치를 모두 power2에 더한다.
                    power2 += graph[i][j]
        min_value = min(min_value, abs(power1-power2)) #7- 2중 for문이 끝났을때 그 둘의 차이의 절댓값이 변수보다 작으면 변수 갱신
        return

    for i in range(idx, n): #8-#4의 조건에 걸리기 전(스타트 팀을 완성하지 못했을때) 백트래킹 실시
        if not visit[i]:
            visit[i] = True
            backTracking(depth+1, i+1) #9-깊이 +1, 같은 번호 중복을 막기위한 idx+1로 재귀호출
            visit[i] = False
backTracking(0, 0)
print(min_value)

sys.maxsize

import sys
 
test = sys.maxsize
print(test)
 
list1 = range(test)
print(len(list1))
 
"""
<결과>
2147483647
2147483647
"""

python3이상에선 int형을 초과할 경우 자동으로 long으로 변환되기 때문에 다음과 같은 연산도 가능하다.

# 최대 정수값 초과시 long으로 자동 변환
test += 1
print(test)
 
"""
<결과>
2147483648
"""
profile
아는만큼보인다.

0개의 댓글