teddy8 Full Stack Software Engineer

[BaekJoon][Greedy] 2217. 로프

2019-06-28
teddy8

문제

URL : https://www.acmicpc.net/problem/tag/%EA%B7%B8%EB%A6%AC%EB%94%94%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98


소스코드

/* 문제 : [2217] 로프
[input]
2
10
15
[output]
20
[설명]
로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다
k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때,
각각의 로프에는 w/k 만큼의 중량이 걸리게 된다.
이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해라
모든 로프를 사용해야 할 필요는 없다. 단, 각각의 로프는 한 개씩만 존재한다.
*/
#include <iostream>
#include <set>
using namespace std;

int main()
{
	multiset<int> rope;
	int max = -1;			// 최대 중량
	int n;					// 로프의 개수

	cin >> n;

	for (int i = 0, k; i < n; i++) {
		cin >> k;
		rope.insert(k);
	}
	
	multiset<int>::reverse_iterator ri = rope.rbegin();
	int i = 1;

	while (ri != rope.rend()) {
		if (max < *ri * i) {
			max = *ri * i;
		}
		ri++;
		i++;
	}

	cout << max << endl;
	return 0;
}


Comments

Content