본문 바로가기
Algorithm 문제풀기/Baekjoon

[C++] 1026번 보물

by 내일이야 2021. 3. 15.

[문제]

1026번 문제보기

 

[제출코드]

#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가지 방법이 있다는 것을 알았다.

 

[참고]

C++ vector 오름차순, 내림차순으로 정렬

vector 복사

 

 

'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