10819 - 차이를 최대로

choiyongheon·2022년 11월 8일

백트래킹에 대해 연습중인데.. 쉽지 않다..

def dfs(pick, visit):
    global min_val
    if len(pick) == n:
        res = 0
        for i in range(len(pick) - 1):
            r = abs(pick[i] - pick[i+1])
            res += r
        min_val = max(min_val, res)

    for i in range(n):
        if visit[i]:
            continue
        visit[i] = True
        pick.append(lis[i])
        dfs(pick, visit)
        visit[i] = False
        pick.pop()

n = int(input())
lis = list(map(int, input().split(" ")))
visit = [False] * len(lis)
min_val = -sys.maxsize
dfs([], visit)
print(min_val)

pick이라는 리스트에 모든 경우의 수를 담는다.. 물론 길이가 6일때만 pick에서의 차이 최대를 구한다. dfs 막줄의 pick.pop()을 해줘야 빠져나오는게 가능하다.

순열로 풀기

import sys
from itertools import permutations

n = int(input())
lis = list(map(int, input().split(" ")))
min_val = -sys.maxsize

for p in permutations(lis, len(lis)):
    c = 0
    for i in range(0, len(p)-1):
        r = abs(p[i] - p[i+1])
        c += r
    min_val = max(c, min_val)

print(min_val)

훨씬 간단하다!

profile
주니어 백엔드 개발자

0개의 댓글