https://www.acmicpc.net/problem/1026
내 알고리즘의 핵심은 이렇다.
곱을 가장 작게 하려면 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보다 어렵냐? 이건 그냥 문제마다 다 케이스가 다른듯..
'백준 문제풀이 > 실버4' 카테고리의 다른 글
백준 2164번 - 카드2 (0) | 2022.01.12 |
---|---|
백준 1049번 - 기타줄 (0) | 2021.12.17 |
백준 1978번 - 소수 찾기 (0) | 2021.11.11 |
백준 1120번 - 문자열 (0) | 2021.11.09 |
백준 1065번 - 한수 (0) | 2021.11.07 |