문제
내 풀이
function solution(A, B) {
let answer = 0;
let minNum, minIndex, maxNum, maxIndex;
for (let i = A.length; i > 0; i--) {
A.map((num, index) => {
if (index === 0) {
minNum = num;
minIndex = index;
}
if (num < minNum) {
minNum = num;
minIndex = index;
}
});
B.map((num, index) => {
if (index === 0) {
maxNum = num;
maxIndex = index;
}
if (num > maxNum) {
maxNum = num;
maxIndex = index;
}
});
answer += minNum * maxNum;
A.splice(minIndex, 1);
B.splice(maxIndex, 1);
}
return answer;
}
- 코드를 짜면서도 내가 너무 비효율적으로 짜고 있다고 생각했는데 아니나 다를까 정확성 테스트에서는 통과가 되었지만 효율성 테스트에서는 하나도 통과하지 못했다..
다른 분의 풀이
function solution(A,B){
let answer = 0;
A.sort((a,b)=> a-b);
B.sort((a,b)=> b-a);
for(let i=0; i<A.length; i++){
answer = answer + A[i]*B[i];
}
return answer;
}
- 다른 분의 풀이를 보고 '이렇게 단순하게 풀릴 수 있는 문제를 왜 이렇게 복잡하게 생각했을까'라는 생각을 했다. A의 연속되는 최솟값들과 B의 연속되는 최댓값들을 곱하고 다 더하면 된다는 생각은 했는데 각각의 최솟값과 최댓값을 배열에서 제거해야된다고 생각하고 접근한게 패인이었던 것 같다. sort메서드로 간단히 해결할 수 있는 문제였다. 앞으로는 머리속에 일차적으로 든 생각대로 바로 코드를 짜지말고 여러 방법을 고민하고 그 중 가장 최선을 선택해 풀어야겠다.