카테고리 없음

백준 파이썬 10819 차이를 최대로

우히힝 2021. 10. 8. 10:09

백준 링크:https://www.acmicpc.net/problem/10819

 

10819번: 차이를 최대로

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

www.acmicpc.net

 

모든 경우의 수를 계산하는 브루트포스 + 백트래킹으로 하나씩 탐색하는 방법으로 문제를 풀었다.

 

# 에러코드!!!
n=int(input())
s=list(map(int,input().split()))

arr=[]
result=0

def dfs():
    global result

    if len(arr) == n:
        sum_arr = 0
        for i in range(n-1):

            sum_arr += abs(arr[i]-arr[i+1])
        result = max(result,sum_arr)
        return
    for i in s:
        if i not in arr:
            arr.append(i)
            dfs()
            arr.pop()

dfs()

print(result)

다만 이렇게 할 경우 수열 s에 중복값이 있으면 에러가 나기 떄문에 range값으로 넣도록하였다.

 

n=int(input())
s=list(map(int,input().split()))

arr=[]
result=0

def dfs():
    global result
    if len(arr) == n:
        sum_arr = 0
        for i in range(n-1):
            sum_arr += abs(s[arr[i]]-s[arr[i+1]])
        result = max(result,sum_arr)

    for i in range(len(s)):
        if i not in arr:
            arr.append(i)
            dfs()
            arr.pop()

dfs()

print(result)