[BOJ / C++] #2217 로프

Inryu·2021년 8월 6일
0

Problem Solving

목록 보기
9/51
post-thumbnail

우선 로프를 내림차순으로 정렬한다.
만약 20,19,18,5 이런 로프가 있으면
로프들을 골랐을 때, 최대 중량(w)은 그 중 가장
무게가 작은 로프 * 로프개수(k)가 된다.
-> 가장 작은 로프가 견딜 수 있어야 하기 때문에!

로프 개수(k)로프 무게최대 중량(w)
12020*1=20
220, 1919*2=38
320,19,1818*3=54
420,19,18,55*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";
}
profile
👩🏻‍💻

0개의 댓글