본문 바로가기
Algorithm(CodeTree, Python)/완전탐색3

[코드트리 상황을 일일이 가정해보고 진행하는 완전탐색] 숫자 2배 후 하나 제거하기 Python

by kurooru 2022. 12. 27.
# n 입력
n = int(input())
# num_list
num_list = list(map(int, input().split()))

# 함수들
# calc_2(doubled_nums, k)
def calc_2(doubled_nums, k):
    
    # temp_nums
    temp_nums = []

    for i in range(n):
        # 제외할 인덱스일 경우
        if i == k:
            # skip
            continue
        # 이외에는
        else:
            # temp_nums에 추가
            temp_nums.append(doubled_nums[i])
    
    # curr_diff
    curr_diff = 0

    for i in range(n-2):
        curr_diff += abs(temp_nums[i] - temp_nums[i+1])
    
    # 반환
    return curr_diff

# calc(k)
def calc(k):

    # temp_nums -> num_list 복사
    temp_nums = num_list[:]

    # 선택된 인덱스(k)를 두배 해주기
    temp_nums[k] *= 2

    # curr_min_diff
    curr_min_diff = sys.maxsize

    for i in range(n):
        # curr_min_diff update
        curr_min_diff = min(curr_min_diff, calc_2(temp_nums, i))
    
    # 반환
    return curr_min_diff
        

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

# 두배 해줄 인덱스 완전탐색
for i in range(n):
    # min_diff update
    min_diff = min(min_diff, calc(i))

# 출력
print(min_diff)