[Lv.02] 최솟값 만들기

MINBOK·2022년 3월 24일
post-thumbnail

내 코드

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

0개의 댓글