BOJ

백준 1026번: 보물

혀내 2022. 1. 31. 22:59
반응형

 

풀이

  S의 값을 가장 작게 만들기 위해서 A에서 가장 큰 숫자를, B에서 가장 작은 숫자와 곱해주면 된다. 문제에는 B를 재배열하면 안된다고 적혀있지만 우리는 S의 최솟값만 출력하면 되기 때문에.. 😋 입력받은 A와 B를 오름차순으로 정렬해주자. 그 다음, 차례대로 A[0]을 B[N-1]과, A[1]을 B[N-2]와 곱해서 더해주면 된다.

 


코드

#include <iostream>
#include <algorithm>
#define MAX 50

using namespace std;

void init() {
	cin.tie(0); cout.tie(0);
	ios_base::sync_with_stdio(0);
}

int N;
int A[MAX];
int B[MAX];
int S = 0;

int main() {
	cin >> N;

	for (int i = 0; i < N; i++) cin >> A[i];
	for (int i = 0; i < N; i++) cin >> B[i];

	sort(A, A + N);
	sort(B, B + N);

	for (int i = 0; i < N; i++)
		S += A[i] * B[N - 1 - i];

	cout << S;
	return 0;
}
반응형