kakasoo

[node.js] 차이를 최대로 ( 백준 10819번 ) 본문

프로그래밍/알고리즘 풀이

[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];
            }
        }
    }
}

모든 순열을 구한 다음, 주어진 공식을 대입하여 최댓값을 찾으면 된다.
이 문제 바로 직전에 푼 문제는 모든 순열을 구하는 것이기 때문에, 참고하면 좋을 듯 하다.

반응형