[문제]
[제출코드]
#include <iostream>
#include <algorithm>
#include <vector>
int main(){
int N;
std::cin>> N;
std::vector<int> A;
std::vector<int> B;
for(int i=0; i<N; i++){
int x;
std::cin>> x;
A.push_back(x);
}
for(int i=0; i<N; i++){
int x;
std::cin>> x;
B.push_back(x);
}
std::vector<int> tempA(N, 0), tempB(N, 0);
std::copy(A.begin(), A.end(), tempA.begin());
std::copy(B.begin(), B.end(), tempB.begin());
std::sort(tempB.begin(), tempB.end());
std::sort(tempA.begin(), tempA.end());
std::sort(tempA.rbegin(), tempA.rend());
int answer=0;
for(int i=0; i<N; i++){
answer += tempA[i]*tempB[i];
}
std::cout<< answer << '\n';
return 0;
}
[풀이]
B[i]가 큰 수일수록 A[i]는 작은 수가 되도록 한다.
1. A를 내림차순으로 정렬
2. B를 오름차순으로 정렬
[이야기]
이 문제만 풀기 위해서는 배열 복사가 필요없었지만 공부할 겸 그냥 해봤다.
+
오름차순 정렬은 sort를 사용하면 된다고 이미 알고 있었다.
하지만 내림차순은 모르는 상태였다. sort에서 마지막에 desc만 써주면 되는줄 알았다..
reverse(v.begin(), v.end()); // 1. 내림차순 정렬 (오름차순정렬 후 같이 사용)
sort(v.rbegin(), v.rend()); // 2. 내림차순 정렬 ( rbegin()과 rend()를 사용)
sort(v.begin(), v.end(), comp); // 3. 내림차순 정렬 (비교함수를 사용)
구글링해서 위와 같이 3가지 방법이 있다는 것을 알았다.
[참고]
'Algorithm 문제풀기 > Baekjoon' 카테고리의 다른 글
[C++] 2309번 일곱 난쟁이 (0) | 2021.04.21 |
---|---|
[C++,JAVA] 1931번 회의실 배정 (0) | 2021.03.24 |
[C++] 1463번 1로 만들기 (0) | 2021.02.24 |
[C++] 10870번 피보나치 수 5 (0) | 2021.02.24 |
[C++] 1003번 피보나치 함수 (0) | 2021.02.22 |