프로그래머스의 최솟값 만들기(Lv2) 문제이다.


[ 문제풀이 ]

2개의 배열이 주어졌을 때, 각 원소들을 하나씩 매칭시켜서 곱해서 더했을 때 최솟값을 구해야 하는 문제이다.

쉽게 생각하면 "곱한 값이 최소가 되기 위해서는, 큰 숫자 일 수록 작은 숫자와 곱해야 상대적으로 더 작은값" 이 나오게 된다.

따라서, 2개의 배열을 정렬을 시켜주었다.

하나의 배열은 오름차순으로, 또 하나의 배열은 내림차순으로 !

그래서 순차적으로 곱해주게되면, 자연스럽게 "상대적으로 큰 값 x 상대적으로 작은 값" 들 끼리 곱해지게 된다.


[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<vector>
#include<algorithm>
using namespace std;
 
bool Cmp(int A, int B)
{
    if (A > B) return true;
    return false;
}
 
int solution(vector<int> A, vector<int> B)
{
    sort(A.begin(), A.end());
    sort(B.begin(), B.end(), Cmp);
    int Sum = 0;
    for (int i = 0; i < A.size(); i++)
    {
        int Value = A[i] * B[i];
        Sum = Sum + Value;
    }
    return Sum;
}
cs


+ Recent posts