프로그래밍/알고리즘 풀이
[node.js] 차이를 최대로 ( 백준 10819번 )
카카수(kakasoo)
2021. 7. 30. 16:34
반응형
// 백준 10819번 차이를 최대로를 풀었습니다.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
if (isNaN(line)) {
const permutation = [...permutations(line.split(" ").map(Number))];
const answer = [];
for (let i = 0; i < permutation.length; i++) {
let sum = 0;
for (let j = 0; j < permutation[i].length - 1; j++) {
sum += Math.abs(permutation[i][j] - permutation[i][j + 1]);
}
answer.push(sum);
}
console.log(Math.max(...answer));
}
});
/**
*
* @param {numbers[]} elements
*/
function* permutations(elements) {
if (elements.length === 1) {
yield elements;
} else {
const [first, ...rest] = elements;
for (const a of permutations(rest)) {
for (let i = 0; i < elements.length; i++) {
const start = a.slice(i);
const ended = a.slice(0, i);
yield [...start, first, ...ended];
}
}
}
}
모든 순열을 구한 다음, 주어진 공식을 대입하여 최댓값을 찾으면 된다.
이 문제 바로 직전에 푼 문제는 모든 순열을 구하는 것이기 때문에, 참고하면 좋을 듯 하다.
반응형