N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.
|A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.
6
20 1 15 8 4 10
62
const fs = require('fs');
let [N, elements] = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');
N = Number(N);
elements = elements.trim().split(' ').map(Number);
let max = 0;
function DFS(depth, sum, used) {
if (depth === N) {
let cal = 0;
for (let i = 0; i < N - 1; i++) {
cal += Math.abs(sum[i] - sum[i + 1]);
}
if (max < cal) max = cal;
return;
}
for (let i = 0; i < N; i++) {
if (!used[i]) {
used[i] = true;
DFS(depth + 1, [...sum, elements[i]], used);
used[i] = false;
}
}
}
DFS(0, [], Array(N).fill(false));
console.log(max);
문제에서 절댓값을 놓쳤다.. 그리고 i-[i-1] / [i-1]-[i-2]를 빼야하는 것도 제대로 못 봐서 짝수 index에는 작은 수를 빼주면 되는거 아닌가? 하고 풀이했다. 문제를 꼼꼼히 보지않고 급하게 보는 습관이 다시 생긴 것 같다. 급하게 풀려고 안 해야 하는데 조금..... 문제 풀이에 대한 강박을 줄일 필요도 있을 것 같다.