그리디 알고리즘 분류로 되어있는데, 정확한 분류 사유는 모르겠다.
이 문제를 풀기 위해서는 w의 물건을 들기 위해서 k개의 로프를 사용했다면, 각 로프에 w/k의 하중이 걸린다.
로프마다 견딜 수 있는 무게를 오름차순으로 정렬했다고 하면,
(각 로프가 견딜 수 있는 최대 하중) * (사용할 수 있는 로프의 개수)로 최댓값을 찾으면 된다.
해설코드(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
|
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
long long N, val;
long long sum = 0;
vector<long long> v;
int main() {
cin >> N;
for(int i = 0; i < N; i++){
cin >> val;
v.push_back(val);
}
sort(v.begin(), v.end());
for(int i = 0; i < v.size(); i++){
sum = max(sum, v[i] * (N - i));
}
cout << sum << endl;
return 0;
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 10448] 유레카 이론 (0) | 2020.05.31 |
---|---|
[BOJ 10610] 30 (배수판정법 참고) (0) | 2020.05.31 |
[BOJ 2602] 돌다리 건너기 (0) | 2020.05.28 |
[BOJ 11399] ATM (0) | 2020.05.25 |
[BOJ 1107] 리모컨 (0) | 2020.05.25 |