[백준] 2217번 로프 / C++
#문제
#풀이
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, x, max(0);
vector<int> vec;
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> x;
vec.push_back(x);
}
sort(vec.rbegin(), vec.rend());
for (int i = 0; i < vec.size(); ++i)
{
int x = vec[i] * (i + 1);
if (max < x)
{
max = x;
}
}
cout << max;
return 0;
}
#정리
n개의 숫자를 입력받는다. 입력받는 숫자는 각 로프가 최대 들어올릴 수 있는 중량을 의미한다. 첫 시도에서는 입력받는 숫자 중 가장 작은 숫자 * 총 입력 받은 숫자를 출력했다. 예제는 성공했지만, 역시나 실패. 하지만 10, 20, 25를 입력 받았을 땐, 가장 작은 숫자인 10 * 3 = 30 이지만, 20와 25만 사용한다면 40까지 가능하다. 그렇기 때문에 일단 입력받은 숫자를 내림차순으로 정렬하고, 차례로 int x = vec[i] * (i + 1); 수식을 진행하여 가장 큰 수를 찾아 해결했다.
Enjoy Reading This Article?
Here are some more articles you might like to read next: