
function solution(A,B){
var answer = 0;
A.sort((a, b) => a - b);
B.sort((a, b) => b - a);
for(let i = 0; i < A.length; i++) {
answer += A[i]*B[i];
}
return answer;
}
console.log(solution([1, 4, 2],[5, 4, 4])); // 29
console.log(solution([1,2],[3,4])); // 10
배열 A의 가장 작은 값과 배열 B의 가장 큰 값을 하나씩 뽑아 곱하는 것을 배열의 길이만큼 반복한 후에, 곱해서 나온 모든 값을 더해주는 방식으로 접근하였다.
배열 A는 오름차순으로, 배열 B는 내림차순으로 정렬한 후,
A.sort((a, b) => a - b);
B.sort((a, b) => b - a);
각각의 배열에서 같은 인덱스를 가진 요소들끼리 곱해주고 이를 answer에 누적해주었다.
for(let i = 0; i < A.length; i++) {
answer += A[i]*B[i];
}
첫 시도에서 통과하지못했는데, 배열 정렬 부분때문이었다.
A.sort();
B.sort().reverse();
첫 시도에서는 위의 방법과 같이 배열들을 정렬했는데, 이는 사전식 정렬되었다.
테스트 케이스가 아래와 같아서 코드실행하고도 잘못된 점을 못 알아챘다.😅
| [1, 4, 2] | [5, 4, 4] |
| [1,2] | [3,4] |
아무튼 위의 방식대로 정렬하면 이런식으로 사전식 정렬된다.
let a = [1, 10, 11, 2, 4, 5];
a.sort(); // [1, 10, 11, 2, 4, 5]
a.sort().reverse(); // [5, 4, 2, 11, 10, 1]
오름차순 정렬 (원본배열이 변경됨)
arr.sort((a, b) => a - b);
내림차순 정렬 (원본배열이 변경됨)
arr.sort((a, b) => b - a);
const arr = [1, 20, 11, 10, 3, 6, 2];
// 오름차순 정렬
arr.sort((a, b) => a - b); // [1, 2, 3, 6, 10, 11, 20]
// 내림차순 정렬
arr.sort((a, b) => b - a); // [20, 11, 10, 6, 3, 2, 1]
✨참고
https://hohoya33.tistory.com/139 [개발 메모장]
문제 보러가기
https://programmers.co.kr/learn/courses/30/lessons/12941?language=javascript