우선 로프를 내림차순으로 정렬한다.
만약 20,19,18,5 이런 로프가 있으면
로프들을 골랐을 때, 최대 중량(w)은 그 중 가장
무게가 작은 로프 * 로프개수(k)가 된다.
-> 가장 작은 로프가 견딜 수 있어야 하기 때문에!
로프 개수(k) | 로프 무게 | 최대 중량(w) |
---|---|---|
1 | 20 | 20*1=20 |
2 | 20, 19 | 19*2=38 |
3 | 20,19,18 | 18*3=54 |
4 | 20,19,18,5 | 5*4=20 |
따라서
1. 로프를 내림차순한다.
2. for문을 순차적으로 돌면서, 어디까지 포함했을 때 max 중량이 나오는지 찾아낸다.
3. max값 return
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int N;
vector <int> weight;
cin>>N;
for(int i=0;i<N;i++){
int val;
cin>>val;
weight.push_back(val);
}
sort(weight.begin(),weight.end());
reverse(weight.begin(),weight.end()); //내림차순
int w=0; int k=0; int max=-2147000000;
for(int i=0;i<N;i++){
k++;
w=weight[i]*k;
if(w>max) max=w;
}
cout<<max<<"\n";
}