본문 바로가기
Algorithm(CodeTree, Python)/Backtracking

[코드트리] 2n개 중에 n개의 숫자를 적절하게 고르기 Python

by kurooru 2023. 2. 2.
# n 입력
n = int(input())
# num_list
num_list = list(map(int, input().split()))

# 함수들
# calc(g_1, g_2)
def calc(g_1, g_2):
    # sum_1, sum_2
    sum_1, sum_2 = sum(g_1), sum(g_2)
    
    # 반환
    return abs(sum_1 - sum_2)

# simulate(curr_idx, cnt)
def simulate(curr_idx, cnt):
    # 전역 변수 선언
    global min_diff

    # 종료조건
    # 끝에 닿고
    if curr_idx == 2*n:
        # 원하는 만큼의 숫자를 썼으면
        if cnt == n:
            # min_diff update
            min_diff = min(min_diff, calc(group_1, group_2))
        return
    
    # group_1에 넣을 경우
    group_1.append(num_list[curr_idx])
    simulate(curr_idx + 1, cnt + 1)
    group_1.pop()

    # group_1에 안넣을경우
    group_2.append(num_list[curr_idx])
    simulate(curr_idx + 1, cnt)
    group_2.pop()

# 설계
# min_diff
import sys
min_diff = sys.maxsize

# group_1, group_2
group_1, group_2 = [], []

# simulate(curr_idx, cnt)
simulate(0, 0)

# 출력
print(min_diff)