[백준/BOJ] 백준 2217번 : 로프

2020. 6. 9. 04:22알고리즘 문제풀이

https://www.acmicpc.net/problem/2217

 

2217번: 로프

N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만

www.acmicpc.net

입력받은 밧줄을 오름차순으로 정렬한뒤, (한 밧줄이 버틸 수 있는 중량 * 이 중량 이상을 버티는 로프의 개수)중 가장 큰 값이 버틸 수 있는 최대 중량이라는것을 이용하여 문제를 해결했다.

 

코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int n;
	vector<int> rope;
	int temp;
	int result = 0;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> temp;
		rope.push_back(temp);
	}

	//오름차순으로 정렬한다
	sort(rope.begin(), rope.end());

	//(한 밧줄이 버틸수 있는 중량 *  이 중량 이상을 버티는 로프의 개수)중 가장 큰 값이
	//버틸수 있는 최대 중량이다
	for (int i = 0; i < n; i++)
	{
		result = max(result, rope[i] * (n - i));
	}

	cout << result;
}