반응형
문제
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 |