정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
나는 numbers
의 배열값을 오름차순 정렬하여, 배열의 값이 음수x음수
가 result
값이 될 수도 있기 때문에 나열된 배열의 값중 제일 앞 두개의 값과 제일 뒤의 두개의 값을 곱한 값을 비교하는 방식으로 문제를 해결하였다.
근데 충격인 사실 ..
원래 파이썬으로 코테를 준비하다가 자스로 넘어온건데,
자스엔 음수 인덱스가 없다고 한다 ....😇
심지어 sort()
도 파이썬의 sort()
와는 많이 달라서 헤맸다 ...ㅜ
js의 sort()
는 문자형 오름차순으로 정렬된다. 숫자도 마찬가지로 문자형 오름차순으로 정렬되기 때문에 일반적으로 숫자 정렬을 하려고 sort()
만 입력하면 원하는 결과를 얻을 수 없다.
const number = [1, 5, 10, 20, 25, 100];
number.sort();
console.log(number); //[1, 10, 100, 20, 25, 5]
그래서 아래와 같이, 추가로 약간 작성해줘야하는 부분이 존재한다.
const number = [1, 20, 5, 10, 100];
// 오름차순 정렬
number.sort(function(comp1, comp2) {
return comp1 - comp2; // [1, 5, 10, 20, 100]
});
// 내림차순 정렬
number.sort(function(comp1, comp2) {
return comp2 - comp1; // [100, 20, 10, 5, 1]
});
음수 인덱스가 없다는 부분은, 아래와 같이 해결했다.
numbers[numbers.length - 1]; // 파이썬의 numbers[-1]과 동일
numbers[numbers.length - 2]; // 파이썬의 numbers[-2]과 동일
function solution(numbers) {
var answer = 0;
numbers = numbers.sort((a,b)=>a-b)
var a = numbers[0] * numbers[1]
var b = numbers[numbers.length - 1] * numbers[numbers.length - 2];
answer = (a>b) ? a : b
return answer;
}
이를 Math.max()
로 좀 더 간결하게 작성 가능하다.
function solution(numbers) {
var answer = 0;
numbers = numbers.sort((a,b)=>a-b)
var a = numbers[0] * numbers[1]
var b = numbers[numbers.length - 1] * numbers[numbers.length - 2];
return (Math.max(a,b))
}