알고리즘

백준(BOJ) 1026 보물

짬뽕얼큰하게 2018. 11. 26. 11:21

이 문제는 A만 재배열하라고 했지만, A의 재배열을 통해 B에 대응하는 방법을 생각하면 50! 의 복잡도가 나오게 된다. 


따라서 A B를 정렬하여 A배열의 가장 낮은값과 B배열의 가장 높은값일 곱했다.


B 재배치는 하지말라 하였으나,  A배열의 순서 출력이 아니라 최소 비용의 출력이기때문에 A, B를 재배치하여 최소값을 구하였다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int A[100];
 
int B[100];
int main(void){
  int N;
  scanf("%d"&N);
  for(int i = 0 ; i < N; i++){
    scanf("%d", A + i);
  }
  for(int i = 0 ; i < N; i++){
    scanf("%d", B + i);
  }
 
  sort(A, A + N);
  sort(B, B + N);
  int sum = 0;
  for(int i = 0; i < N; i++){
    sum += A[i] * B[N - 1 - i];
  }
  printf("%d", sum);
}
 
cs