반응형
<문제 소개>
<소스 코드>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> A, vector<int> B)
{
int answer = 0;
sort(A.begin(), A.end());
sort(B.rbegin(), B.rend());
for(int i = 0; i < A.size(); i++)
{
answer += A[i] * B[i];
}
return answer;
}
<풀이과정>
1. 두 배열의 원소들을 각각 곱해서 더한 값이 최소가 나오려면, 한 쪽의 가장 작은 값과 다른 한 쪽의 가장 큰 값을 곱하고, 그 다음 작은 값과, 다른 한 쪽의 그 다음 큰 값을 곱하고 이렇게 한 쪽은 작은 값부터 오름차순으로 다른 한 쪽은 큰 값부터 내림차순으로 쌍을 지어 곱해주어야 한다.
2. 따라서 sort를 이용해 A는 작은 수부터 오름차순으로 정렬하고, B는 큰 수부터 내림차순으로 정렬한다.
3. A,B는 길이가 같으므로 반복을 같이 진행하며 각각의 원소를 곱해서 answer에 더해준다.
4. 반복이 끝난 뒤 answer를 리턴한다.
<코멘트>
이게 통과야? 했는데 통과 되었다.ㅋㅋㅋ
sort를 이용해서 2단계치곤 엄청 빨리, 간단하게 풀어낸 것 같다.👍
<제출결과>