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

[코드트리] xor 결과 최대 만들기 Python

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

# 함수들
# calc(curr_comb)
def calc(curr_comb):
    # curr_result
    curr_result = 0

    # 계산 시작
    for num in curr_comb:
        curr_result = curr_result ^ num
    
    # 반환
    return curr_result

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

    # 종료 조건
    # 끝까지 닿고,
    if curr_idx == n:
        # 다 썼으면,
        if cnt == m:
            # max_num udpate
            max_num = max(max_num, calc(comb))
        return
    
    # 넣을 경우
    comb.append(num_list[curr_idx])
    simulate(curr_idx + 1, cnt + 1)
    comb.pop()
    # 안넣을 경우
    simulate(curr_idx + 1, cnt)

# 설계
# max_num
max_num = 0
# comb
comb = []
# simulate(curr_idx, cnt)
simulate(0, 0)

# 출력
print(max_num)