카드 정렬하기

#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를 하면 안됨.

좋은 웹페이지 즐겨찾기