[백준] 2217번 로프 / C++

#문제

백준 2217번 로프

#풀이

#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:

  • [백준] 1037번 최소공배수 / C++
  • [백준] 9613번 GCD 합 / C++
  • [백준] 10773번 제로 / C++
  • [백준] 2751번 수 정렬하기 2 / C++
  • [백준] 10816번 숫자 카드 2 / C++