백준/그리디
C++ 2217번(로프)
2zreal
2024. 6. 26. 23:54
#include <iostream>
#include <algorithm>
using namespace std;
int arr[100001];
int main(void)
{
int a=0;
cin>>a;
int max=0;
for(int i=0; i<a; i++)
{
cin>>arr[i];
}
sort(arr, arr+a);
for(int i=0; i<a; i++)
{
int num=(a-i)*arr[i];
if(num>max)
{
max=num;
}
}
cout<<max;
return 0;
}
로프 문제!! 로프는 무게를 동등하게 나눈다. 최대 얼마까지 들 수 있는가?? 여기서 중요한 것이 로프를 꼭 사용하지 않아도 된다는 것.
예를 들어
5
30
10
70
50
90 이 있다고 치자
가장 작은 10을 만약 사용한다고 치자. 그러면 가장 작은 로프는 10까지 들 수 있으므로 다른 로프들도 어쩔 수 없이 10만 들어야 한다.
총 50
그 다음은 30을 사용한다고 치자. 그러면 30짜리 로프는 무게를 30까지 들 수 있으므로 다른 로프들도 30씩 든다.
총 120(여기서 10로프는 사용하지 않는다.)
마지막으로 50을 사용한다고 치자. 그러면 50짜리 로프는 무게 50까지 들 수 있으므로 다른 로프들도 50씩 든다.(50보다 작은 로프는 사용하지 못한다. 끊어질 수 있기 때문.)
총 150
결국 sort함수를 이용해서 정렬을 해준 뒤에 차례차례 크기를 비교해서 답을 구하는 문제이다. 정렬해주는 것이 key포인트 이다.