
https://school.programmers.co.kr/learn/courses/30/lessons/120862
function solution(numbers) {
numbers.sort((a, b) => Math.abs(b) - Math.abs(a));
const negative = numbers.filter((v) => Math.abs(v) !== v);
const positive = numbers.filter((v) => Math.abs(v) === v);
if (negative.length === 1 && positive.length === 1) {
return negative[0] * positive[0];
}
const negativeSum = negative.length >= 2 ? negative[0] * negative[1] : 0;
const positiveSum = positive.length >= 2 ? positive[0] * positive[1] : 0;
return Math.max(negativeSum, positiveSum);
}
✔ 절댓값이 큰 순서로 정렬한 후, 음수 배열과 양수 배열로 나눔
✔ numbers의 길이는 2 이상이기 때문에 (1) 양수 1개 음수 1개, (2) 양수 2개 이상, (3) 음수 2개 이상 으로 분류
✔ (2)와 (3)이 동시에 참인 경우 Math.max를 통해 더 큰 값을 판단
function solution(numbers) {
numbers.sort((a, b) => a - b);
return Math.max(numbers[0] * numbers[1], numbers[numbers.length - 1, numbers.length - 2]);
}
뒷통수를 얻어맞은 느낌.. 왜 이런 생각을 못했을까?
✔ 정렬하면 가장 작은 음수는 가장 좌측에, 가장 큰 양수는 가장 우측에 있음을 이용한 심플하지만 멋진 방법!