const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
.toString()
.trim()
.split("\n");
const N = input[0];
let pArr = []; // 0 보다 큰 양수인 수
let nArr = []; // 0 혹은 음수
for (let i = 0; i < N; i++) {
if (input[i + 1] > 0) {
pArr.push(input[i + 1]);
} else {
nArr.push(input[i + 1]);
}
// 내림차순으로 정렬
pArr.sort((a, b) => b - a);
// 오름차순으로 정렬
nArr.sort((a, b) => a - b);
}
// 현재 숫자와 다음 숫자가 있고, 둘 다 1보다 클 때 (묶는 게 이득일 때)
let pMaxSum = 0;
for (let i = 0; i < pArr.length; i++) {
if (i + 1 < pArr.length && pArr[i] > 1 && pArr[i + 1] > 1) {
pMaxSum += pArr[i] * pArr[i + 1];
i++;
} else {
pMaxSum += Number(pArr[i]);
}
}
let nMaxSum = 0;
for (let i = 0; i < nArr.length; i++) {
if (i + 1 < nArr.length) {
nMaxSum += nArr[i] * nArr[i + 1];
i++;
} else {
nMaxSum += Number(nArr[i]);
}
}
let maxSum = pMaxSum + nMaxSum;
console.log(maxSum);
1이상 양수 큰 수 순서대로 곱하고 나머지는 다 더하기
→ 예제 4번을 보고 0이 있으면 음수와 곱해야하는 것을 깨달음
3
-1
0
1
→ 또 고민하다보니 음수가 두 개라면 작은 음수끼리 곱해야 큰 양수가 됨을 깨달음
[ '7', '6', '2', '1' ]
[ '-3', '-2', '-1', '0' ]
이렇게 0 포함 음수배열로 나누고 나니, 0있고 없음을 고려해서 조건문 안적고 작은 수부터 차례로 곱하면 해결됨을 깨달았음!