minhui study

백준 2217번 루프 (python, c++) 본문

백준 문제풀이/그리디 알고리즘

백준 2217번 루프 (python, c++)

minhui 2020. 6. 1. 01:51

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

 

2217번: 로프

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

www.acmicpc.net

만약 로프가 { 10, 80, 50, 5 }가 있다고 가정해보자

내림차순으로 정리하면 { 80, 50, 10, 5 } 이렇게 되는데 이때 중량이 각각의 루프에 똑같이 걸리므로 

80*1 또는 50*2, 10*3, 5*4 중 가장 큰 값을 고르면 된다. 즉, 가장 무거운 중량을 들 수 있는 루프는 1개 사용하거나 무거운 중량을 못드는 루프 기준으로 루프를 여러개 사용하거나 이 중 중량을 더 많이 들 수 있는 것을 선택하는 것이다.

 

 

<python>

n=int(input())
arr=[]

for i in range(n):
    rope=int(input())
    arr.append(rope)

arr.sort(reverse=True)
weight=0
for i in range(n):
    if weight < arr[i]*(i+1) :
        weight = arr[i]*(i+1)

print(weight)

 

 

 

<C++>

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


int main() {

	int input;
	int weight = 0;
	cin >> input;
	vector<int> arr(input);
	for (int i = 0; i < input; i++) {
		cin >> arr[i];
	}
	sort(arr.begin(), arr.end(), greater<int>());

	for (int i = 0; i < input; i++) {
		if (weight < arr[i] * (i + 1)) {
			weight = arr[i] * (i + 1);
		}
	}

	cout << weight;
}
Comments