반응형
728x170
정말 느낌대로 풀면 되는 풀이지만
검증을 해야한다 사실..
https://www.acmicpc.net/problem/1026
#맞은 풀이
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int N;
vector<int> vec;
vector<int> target;
int main(){
cin >> N;
//A숫자
for(int i = 1; i<=N; i++){
int a;
cin >> a;
vec.push_back(a);
}
//B숫자
for(int i = 1; i <= N; i++){
int b;
cin >> b;
target.push_back(b);
}
sort(target.begin(), target.end()); // 오름차순
sort(vec.begin(), vec.end()); // 오름차순
reverse(vec.begin(),vec.end()); // 내림차순
int sum = 0;
for(int i = 0; i<N; i++){
sum += vec[i] * target[i];
}
cout << sum <<'\n';
}
여기 아이디어는
큰 숫자를 곱할 때 작은 숫자와 곱해야 작아진다. 라는 간단한 생각으로 풀었다.
모든 숫자에 대해 최소의 값을 더해주면 모두 더한 것도 최소라고 생각해서 풀었다.
가장 큰 숫자에는 가장 작은 숫자를 곱해야 해당 숫자로 만들 수 있는 가장 작은 숫자가 되고
나머지에서 또 가장 큰 숫자와 가장 작은 숫자... 계속하면 된다.
약간 나눠서 정답인 것은 합쳐도 정답이다.라는 느낌이다.
Divide & Conquer
아무튼 실제로 생각해보면 그렇다.
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
백준, BOJ, 11052번 C++ [CPP] (0) | 2021.06.30 |
---|---|
백준, BOJ, 12865번 C++ [CPP] (0) | 2021.06.29 |
백준, BOJ, 2217번 C++ [CPP] (0) | 2021.06.28 |
백준, BOJ, 12582번 C++ [CPP] (0) | 2021.06.22 |
백준, BOJ, 11659번 C++ [CPP] (0) | 2021.06.22 |