알고리즘/백준

백준 2217 로프 c++ [컴공과고씨]

시간빌게이츠 2022. 3. 24. 20:20
반응형

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

 

2217번: 로프

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

www.acmicpc.net

이 문제는 어떤 식으로 접근했냐면 한 로프를 사용한다고 가정했을 때, 자기보다 많은 무게를 드는 로프는 결국 자신의 로프의 최대 들 수 있는 용량을 모두 들 수 있다는 것을 이용했다.

10 30 50 50 85 90 이라는 무게를 들 수 있는 로프가 있을 때 10로프를 이용해서 들 수 있는 최대 중량은? 10과 10보다 큰 로프의 개수를 10에 곱해주면 총 60을 들 수 있다. 30로프를 이용할 때는? 30과 30보다 큰 로프 즉, 30보다 큰 로프의 개수 +1에 자신이 들 수 있는 무게 30을 곱해주면 된다. 이렇게 해서 각 로프를 이용할 때 들 수 있는 최대 용량을 구해서 각각의 값들에서 가장 큰 값이 모든 로프에서 들 수 있는 최대 중량이 된다.

정리하면 A용량의 로프를 이용할 때 들 수 있는 최대 용량은

(A가 들 수 있는 최대 용량)*(A보다 큰 용량의 로프의 개수 + 1) 이 된다.

 

전체코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    long long loap[100001];
    int n;
    cin >> n;
    for (int i = 0; i < n;i++){
        cin >> loap[i];
    }
    sort(loap, loap + n); // 오름차순 정렬
    long long most = 0;
    for (int i = 0; i < n;i++){
        if(most < loap[i]*(n-i)){ 
            most = loap[i]*(n-i); // (자기가 들 수 있는 최대 용량)*
(자기보다 큰 용량의 로프의 개수 + 자신)
        }
    }
    cout << most;
    return 0;
}
cs

 

사용알고리즘 : sort

 

yea!

반응형