https://programmers.co.kr/learn/courses/30/lessons/12941
function solution(A,B){
var answer = 0;
A.sort();
B.sort();
for(let i= 0; i < A.length; i++){
for(let j = A.length - 1; j >= 0; j--){
answer += A[i] * B[j]
A.shift()
B.pop()
}
}
return answer;
}
테스트 케이스만 통과한 셈이다..
정렬을 사용하니 시간 초과가 뜬다.
function solution(A,B){
var answer = 0;
A.sort(); // 오름차순
B.sort((a,b)=>b-a); // 내림차순
for(let i = 0; i < A.length; i++){
answer += A[i] * B[i]
}
return answer;
}
이 또한 테스트 케이스만 맞고 정확성, 효율성에서 실패하였다.
하지만
A.sort()를 A.sort((a,b)=>a-b)로 변경하면 정답 처리가 되었다.
A.sort()와 A.sort((a,b)=>a-b) 둘 다 오름차순으로 정렬된다고 생각하여 차이가 없다고 생각하였는데 아니었다.
JS에서 sort() 함수는 ASCII문자 순서대로 정렬된다.
let arr = [1,4,10,2,11]
arr.sort() // 1,10,11,2,4
arr.sort((a,b)=>a-b) // 1,2,4,10,11
[1,4,10,2,11] 인 배열이 있을 때,
sort() 함수는 [1,10,11,2,4]로 정렬이 된다. (두자릿수 이상부터는 정렬에 대한 오류가 발생)
정확한 오름차순을 위해서는 sort((a,b)=>a-b)를 사용하도록 하자.
function solution(A,B){
A.sort((a, b) => a - b)
B.sort((a, b) => b - a)
return A.reduce((total, val, idx) => total + val * B[idx], 0)
}
reduce를 사용한 풀이