본문 바로가기

카테고리 없음

[백준 / 1026] 보물 - C++

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

 

1026번: 보물

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

www.acmicpc.net

 

입력으로 숫자들을 받아 그 숫자들의 순서를 조정하여 곱한 값을 가장 작게 만드는 문제이다.

문제 태그를 보고 최대한 잡생각 없이 간결하게 풀려고 해보았다.

간단히 생각해보면 두 수를 서로 곱할때 가장 큰것 * 가장 작은것 이런식으로 매칭을 해줄때 가장 작은 경우가 된다. 

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

int main() {
    
    int n;
    int sum = 0;
    cin >> n;
    
    vector<int> v1(n), v2(n);
    for (int i = 0; i < n; i++){
        cin >> v1[i];
    }
    for (int i = 0; i < n; ++i){
        cin >> v2[i];
    }
    
    
    sort(v1.begin(), v1.end());
    sort(v2.rbegin(), v2.rend());
    for (int i = 0; i < n; ++i){
        sum += v1[i] * v2[i];
    }
        
    cout << sum;
}

 

따라서 첫줄 숫자를 받은 배열과 두번째줄 숫자를 받은 배열의 정렬 순서를 반대로 해서 곱해주면 해결된다.