백준1026 - 보물

ieunjung·2020년 8월 17일

문제 파악

  • S = A[0]B[0] + ... + A[N-1]B[N-1]
  • S 값을 가장 작게(최솟값) 만들기 위한 A 수를 재배열하라.

문제의 함정 : 단, B에 있는 수는 재배열하면 안 된다.

문제 해결 포인트

최솟값을 만들기 위해선 최댓값최소값을 곱하면 된다.
그러므로 A를 오름차순 정렬, B를 내림차순 정렬해서 각 요소를 곱하면 답이 나온다.

문제에서 제시한 예제를 따르면
A 오름차순 정렬, B 내림차순 정렬하면 [0,1,1,1,6], [8,7,3,2,1]이다

이는 원래 B [2,7,8,3,1]을 재정렬하지 않고 이에 맞춰서 A를 [1,1,0,1,6] 재정렬한 것과 같다.

코드

// data.shift() 해서 나눠서 가져온다.
function solution(n, data) {
    let arrA = data[0], arrB = data[1];

    arrA = arrA.sort((a, b) => a - b);
    arrB = arrB.sort((a, b) => b - a);

    let min = 0;
    for (let i = 0; i < n; i++) {
        min += arrA[i] * arrB[i];
    }

    console.log(min);
}
profile
Done is better than perfect

0개의 댓글