Algorithm/Python

[백준 10819] 차이를 최대로

🥭맹2 2021. 5. 25. 21:37

1. 문제

https://www.acmicpc.net/problem/10819

 

10819번: 차이를 최대로

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

www.acmicpc.net

2. 접근 방법

주어지는 숫자의 갯수가 2~8이라 순열을 사용해도 되겠다 싶었습니다.

 

1. 순열을 만들기 전에 미리 요소 하나를 담고

2. 여기에 요소 하나를 추가할 때마다 기존 순열 리스트에 담겨있는 맨 마지막 숫자와의 차이를 변수에 담아줍니다.

3. 순열 리스트의 요소 갯수가 N개가 되었을 때, 숫자들의 차이를 합친 변수의 크기가 기존 최댓값보다 클 경우 갱신해줍니다.

3. 코드

python

def perm(k, temp):
    global N, inputs, answer, max_val

    if k == N:
        if temp > max_val:
            max_val = temp
        return
    
    for i in range(N):
        if not visited[i]:
            visited[i] = True
            diff = abs(answer[-1]-inputs[i])
            temp += diff
            answer.append(inputs[i])
            perm(k+1, temp)
            visited[i] = False
            temp -= diff
            answer.pop()

N = int(input())
inputs = list(map(int, input().split()))
max_val = 0

for i in range(N):
    visited = [False]*N
    answer = [inputs[i]]
    visited[i] = True
    perm(1, 0)

print(max_val)

4. 마치며

마치며~!

'Algorithm > Python' 카테고리의 다른 글

[백준 1759] 암호만들기  (1) 2021.05.27
[백준 11723] 집합  (1) 2021.05.26
[프로그래머스] 주식가격  (0) 2021.05.20
[프로그래머스] 튜플  (0) 2021.05.14
[백준 6603] 로또  (0) 2021.05.11