반응형
차이를 최대로
티어 : Silver 2
시간 제한 : 1 초
메모리 제한 : 256 MB
알고리즘 분류 : 브루트포스 알고리즘, 백트래킹
문제
N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.
|A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|
입력
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
출력
첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.
예제 입출력
Algorithm
Back Tracking 이용
1. stack에 포함되어있지 않은 index append
2. 재귀함수 호출
3. 재귀함수 return되면 pop
4. stack의 길이가 N이 되면 식의 최댓값 갱신
Code
def back_tracking():
global answer
# stack의 길이가 N이 되면 식의 최댓값 갱신
if len(stack) == N:
sum_ = 0
for idx in range(1, N):
sum_ += abs(nums[stack[idx-1]] - nums[stack[idx]])
if answer < sum_:
answer = sum_
else:
for index in range(N):
if index not in stack:
stack.append(index)
back_tracking()
stack.pop()
N = int(input())
nums = list(map(int, input().split()))
global answer
answer = 0
stack = []
back_tracking()
print(answer)
메모리: 30864 KB
시간: 200 ms
반응형
'백준 > Python' 카테고리의 다른 글
[백준 10971] 외판원 순회 2 Python (0) | 2022.04.11 |
---|---|
[백준 2644] 촌수계산 Python (0) | 2022.04.08 |
[백준 2606] 바이러스 Python (0) | 2022.04.08 |
[백준 10974] 모든 순열 Python (0) | 2022.04.08 |
[백준 5598] 카이사르 암호 Python (0) | 2022.04.08 |