발생가능한 배열의 케이스는 총 3가지이고, 각각에 대하여 3가지 곱의 최댓값을 뽑는 방법은 아래와 같다.
(오름차순으로 정렬되었다는 전제이다.)
1. 양수, 음수가 섞인 경우
- [-3, -2, 1, 2, 3] : 0~1번 인덱스의 숫자의 곱이 2~3번 인덱스의 숫자의 곱보다 크면, (0, 1, 4)번 인덱스 값의 곱이 답이다.
- [-3, -2, 4, 5, 6] : 0~1번 인덱스의 숫자의 곱이 2~3번 인덱스의 숫자의 곱보다 작으면, 2~4번 인덱스의 숫자의 곱이 답이다.
2. 모두 양수일 경우
- [1, 2, 3, 4, 5] : 2~4번 인덱스의 숫자의 곱이 답이다.
3. 모두 음수일 경우
- [-5, -4, -3, -2, -1] : 2~4번 인덱스의 숫자의 곱이 답이다.
즉,
양수, 음수가 섞인 배열 중 0~1번 인덱스의 숫자의 곱이 last index-1, last index-2의 곱보다 크면 (0, 1, last index) 곱을 반환하고,
그 외에는 모두 (last index-2, last index-1, last index)의 곱을 반환하면 된다.
function solution(A) {
const array = A.slice();
const sortedArray = array.sort((a, b) => a - b);
const lastIndex = sortedArray.length - 1;
// 음수, 양수가 섞어있을 경우
if (sortedArray[0] < 0 && sortedArray[1] < 0 && sortedArray[lastIndex] > 0) {
const compareValue = sortedArray[0] * sortedArray[1];
const value = sortedArray[lastIndex - 1] * sortedArray[lastIndex - 2];
if (compareValue > value) {
return compareValue * sortedArray[lastIndex];
}
}
return (
sortedArray[lastIndex] *
sortedArray[lastIndex - 1] *
sortedArray[lastIndex - 2]
);
}
'Programming > 데일리 알고리즘' 카테고리의 다른 글
[HackerRank] Special String Again (javascript) (0) | 2021.05.29 |
---|---|
[HackerRank] Largest Rectangle (Javascript) (0) | 2021.05.25 |
(210519:BTB) Lesson 6. Distinct (0) | 2021.05.19 |
[HackerRank] Balanced Brackets (Javascript) (0) | 2021.05.18 |
[HackerRank] Sherlock and the Valid String (Javascript) (0) | 2021.05.15 |