이 문제는 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 |
'알고리즘' 카테고리의 다른 글
백준(BOJ) 1002 터렛 (0) | 2018.11.26 |
---|---|
백준(BOJ) 2442 별찍기-5 (0) | 2018.11.26 |
백준(BOJ) 2751 수 정렬하기2 (0) | 2018.11.26 |
백준(BOJ) 2309 일곱 난쟁이 (0) | 2018.11.26 |
백준(BOJ) 2609 최대공약수와 최소공배수 (0) | 2018.11.26 |