: result값 구할때 for문 돌리려고 했는데, 생각을 바꿈.
몫과 나머지로 접근함.
using namespace std;
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
//m 번 더하여 가장 큰수를 만들자.
// 특정 인덱스는 k번 초과 하면 안됨.
//가장 큰값을 고르고,
//두번 째로 카운트롤 갱신하자.
int n, m, k;
cin >> n >> m >> k;
vector<int>v(n, 1);
for (int i = 0; i < n; i++)
{
cin >> v[i];
}
sort(begin(v), end(v), greater<int>());
int first = v[0];
int second = v[1];
//==================//
// 2 4 5 4 6
// max : 6 / 2nd : 5 이므로
// m : 8 , k : 3 이므로
// 6 6 6 5 6 6 6 5 -> 36 + 10 : 46
// 몫과 나머지로 처리해도 괜찮을 듯함...
// 8 번이므로 m + 1 로 몇번을 순환하는 지 몫과 나머지가 필요함.
// 8 -> 총 2번의 순환이 발생하고, 나머지 없음.
// 2번 순환함..
// 세분화 하자 : (3번의 * first + 1번의 * second ) * 2번 순환으로 표현 가능함.
// 만약에 m : 2하면??
// m % k : 2 % 3 : 2이고, 몫은 0임
// 즉 0번의 순환 나머지는 바로 first 처리하면 됨.
// 결과 : m 과 k + 1 의 몫과 나머지를 구함.
// 몫은 순환을 총 몇번했는지 .
int mock = m / (k + 1);
int remainder = m % (k + 1);
//cout << mock << endl;
//cout << remainder << endl;
int result = (first * k + second * 1) * mock + remainder * first;
cout << result << endl;
}