[백준1026] 보물

뚱환·2023년 5월 9일
0

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

**입력

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

**출력

첫째 줄에 S의 최솟값을 출력한다**

풀이

그리디로 푸는 문제
두 배열을 입력 받고
a배열은 오름차순
b배열은 내림 차순으로 정렬한다.
그후 num에 a[i] * b[i]로 곱해준다.

문제에서는 b 배열은 그대로 두라 했지만 이렇게 b 배열을 움직여도 풀린다.

b배열을 움직이지 않고 풀려면 a배열만 정렬 check배열 설정
b배열의 제일 큰 값을 a에 곱하여 정답 변수에 넣고
사용한 b 배열은 check에 표시하여 다시 사용하지 않는
방법도 있다.

코드

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

int main(void)
{

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin >> n;
    vector<int> a(n, 0);
    vector<int> b(n, 0);
    vector<int> sum(n, 0);
    int min = 0;
    int num = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++)
    {
        cin >> b[i];
    }

    sort(a.begin(),a.end());
    sort(b.begin(), b.end(),greater<>());
    for (int i = 0; i < n; i++)
    {
        num += a[i] * b[i];
    }

    cout << num<<"\n";

}
profile
https://github.com/lixxce5017/Algoritm_Weekly_Baekjoon

0개의 댓글