백준 문제풀이/실버4

백준 1026번 - 보물

void_melody 2021. 10. 22. 01:36

https://www.acmicpc.net/problem/1026

 

1026번: 보물

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

www.acmicpc.net

내 알고리즘의 핵심은 이렇다.

곱을 가장 작게 하려면 B 배열의 가장 큰 값은 A 배열의 가장 작은 값을 곱해줘야한다.

B 배열의 수를 재배열해서는 안된다해서, B배열의 값을 똑같이 복사해서 만든 copy 배열을 만든 다음

A 배열은 오름차순, copy 배열은 내림차순으로 만들어준 다음 서로 곱하면서 더해줬다.

#include <iostream>
#include <algorithm>
using namespace std;
bool desc(int a, int b)
{
	return a > b;
}
int main()
{
	int n;
	cin >> n;
	int sum = 0;
	int* a = new int[n];
	int* b = new int[n];
	int* copy = new int[n];

	for (int i = 0; i < n; i++)
		cin >> a[i];
	for (int i = 0; i < n; i++)
	{
		cin >> b[i];
		copy[i] = b[i];
	}

	
	sort(a, a + n);
	sort(copy, copy + n, desc);
	

	for (int i = 0; i < n; i++)
	{
		sum += a[i] * copy[i];
	}

	cout << sum;
	
	return 0;
}

배운 점) sort 함수를 쓸 때, default는 오름차순이다. 내가 내림차순으로 따로 만들어주고 싶다면, 함수를 따로 구현해서 

sort함수의 세번째 인자에 넣어줘야한다. 

 

잡소리) 며칠 전부터 백준을 풀기 시작했는데, soled.ac에서 티어랑 난이도가 엄청난 상관관계가 있는 것 같진 않다.

실버4라고 브론즈 2보다 어렵냐? 이건 그냥 문제마다 다 케이스가 다른듯..