프로그래머스의 최솟값 만들기(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 |
'[ Programmers Code ] > # PG - Level2' 카테고리의 다른 글
[ 프로그래머스 JadenCase문자열 만들기 (Lv2) ] (C++) (0) | 2020.05.15 |
---|---|
[ 프로그래머스 피보나치 수(Lv2) ] (C++) (0) | 2020.05.14 |
[ 프로그래머스 최댓값과 최솟값 (Lv2) ] (C++) (4) | 2020.05.11 |
[ 프로그래머스 폰켓몬 (Lv2) ] (C++) (0) | 2020.05.05 |
[ 프로그래머스 땅따먹기 (Lv2) ] (C++) (0) | 2020.04.28 |