처음에 n, n+1 일때를 더해서 답을 내면 되나 했지만
배열의 각 요소가 규칙없이 제멋대로 이동할 경우를 생각해야 하므로
특별한 로직이 없어 완전 탐색으로 풀려고 했다
하지만 배열 요소 수가 적으므로, 백트래킹이 더 유리하다고 판단하여
백트래킹을 사용하여 가능한 경우의 수를 모두 구하고 set 에 넣어 중복을 제거한 후 다시 배열로 만들어
최대값을 구해주면 되는 문제였다
https://www.acmicpc.net/problem/10819
let input = [];
const readline = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
readline.on("line", (line) => {
input.push(line);
});
readline.on("close", () => {
solution(input);
process.exit();
});
const solution = (inp) => {
let n = Number(inp[0]);
let inparr = inp[1].split(" ").map((el) => Number(el));
let narr = [];
let isused = Array(n + 4).fill(0);
let sumset = new Set();
const bt = (k) => {
if (k === n) {
let sum = 0;
for (let i = 0; i < narr.length - 1; i++) {
sum += Math.abs(narr[i] - narr[i + 1]);
}
sumset.add(sum);
return;
}
for (let i = 0; i < n; i++) {
if (!isused[i]) {
isused[i] = 1;
narr.push(inparr[i]);
bt(k + 1);
narr.pop();
isused[i] = 0;
}
}
};
bt(0);
let ansarr = Array.from(sumset);
let maxi = Math.max(...ansarr);
console.log(maxi);
};
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
[백준 9237/javascript] 이장님 초대 (0) | 2022.10.14 |
---|---|
[백준 13417/javascript] 카드 문자열 (0) | 2022.10.14 |
[백준 6550/javascript] 부분 문자열 (0) | 2022.10.11 |
[백준 1543/javascript] 접두사 찾기 (0) | 2022.10.10 |
[백준 1010/javascript] 다리 놓기 (0) | 2022.10.09 |
댓글