[백준/BOJ] 백준 1026번 : 보물

2020. 9. 16. 01:11알고리즘 문제풀이

www.acmicpc.net/problem/1026

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거�

www.acmicpc.net

s의 최솟값을 구하기 위해, a는 내림차순으로 정렬하고, b는 오름차순으로 정렬하여 정렬한 순서대로 a[i]*b[i]를 해서 그 값을 s에 더했다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int n;
	int input;
	vector<int> a;
	vector<int> b;
	int s = 0;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		a.push_back(input);
	}

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		b.push_back(input);
	}

	//a는 오름차순으로 정렬뒤 뒤집어서 내림차순으로 정렬한다
	sort(a.begin(), a.end());
	reverse(a.begin(), a.end());

	//b는 오름차순으로 정렬한다
	sort(b.begin(), b.end());

	//a는 큰수, b는 작은수부터 해서 a[i]*b[i]의 값을 s에 더한다
	for (int i = 0; i < n; i++)
	{
		s += a[i] * b[i];
	}

	cout << s;

	return 0;
}