BOJ

백준 2217 - 로프

yanJuicy 2019. 4. 10. 00:34
반응형

문제

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

 

2217번: 로프

N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을

www.acmicpc.net

 

풀이

입력받은 N개의 수를 정렬하여 저장한다.

최대 중량을 구해야 하므로 정렬된 값들을 골라서 최대로 만들면 된다.

 

정렬된 다음 인덱스 로프는 이전 인덱스 로프 무게를 버틸 수 있다.

따라서 첫 번째 값은 최대 N배만큼 늘릴 수 있고, 두 번째 값은 N - 1배, 세 번째는 N - 2배... 이렇게 각 로프들을 최대 중량으로 바꾼다.

예를 들어 10 15 17 19 면 10*4 15*3 17*2 19*1 이 되므로 40 45 34 19가 되고 이중 최대는 45가 된다. 

 

소스 코드

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
 
using namespace std;
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
 
    int N;
    cin >> N;
 
    vector<int> v;
 
    for (int i = 0; i < N; i++)
    {
        int num;
        cin >> num;
        v.push_back(num);
    }
 
    sort(v.begin(), v.end());
 
    int mul = v.size();
    std::priority_queue<int> pq;
    for (int i = 0; i < N; i++)
    {
        pq.push(v[i] * mul--);
    }
 
    cout << pq.top();
 
    return 0;
}
 
cs
반응형

'BOJ' 카테고리의 다른 글

백준 1463 - 1로 만들기  (0) 2019.05.12
백준 3085 - 사탕 게임  (0) 2019.05.12
백준 1912 - 연속합  (0) 2019.05.07
백준 1969 - DNA  (0) 2019.04.10
백준 1449 - 수리공 항승  (0) 2019.04.09