백준/그리디

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포인트 이다.