
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
int s;
cin >> s;
int iResult(0);
vector<int> vTemp;
for (int i = 0; i < s; i++)
{
int iTemp;
cin >> iTemp;
vTemp.push_back(iTemp);
}
sort(vTemp.begin(), vTemp.end(), [](int a, int b) {
return a < b;
});
if (s < 3)
{
for (int i = 0; i < s; i++)
{
iResult += vTemp[i];
}
}
else
{
for (int i = 0; i < s; i++)
{
if (i == 0 || i == 1)
{
iResult += (s - 1)*vTemp[i];
}
else
{
iResult += (s - i)*vTemp[i];
}
}
}
cout<< iResult;
}
내가 한 코드인데 이 코드는 틀렸음.
왜냐면 한번 덧셈 이후 중간에 결과값들이 바뀌기 때문임.
이렇게 하면 계산이후 결과값들을 반영할 수 없음.
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main(void)
{
int s;
cin >> s;
int iResult(0);
priority_queue<int, vector<int>, greater<int>> vTemp;
for (int i = 0; i < s; i++)
{
int iTemp;
cin >> iTemp;
vTemp.push(iTemp);
}
int iCnt(0);
while (1)
{
if (iCnt >= s - 1)
{
break;
}
int iTemp1 = vTemp.top(); vTemp.pop();
int iTemp2 = vTemp.top(); vTemp.pop();
iResult += (iTemp1 + iTemp2);
vTemp.push(iTemp1 + iTemp2);
iCnt++;
}
cout<< iResult;
return 0;
}
push할때 iResult를 하면 안됨.