~cpp
#include<iostream.h>
//using namespace std;
bool changeTwoPart(int* right,int* left,int gap,int nPeople);
void changeTwoElement(int* rightPart,int i,int* leftPart,int j);
void sort(int* array,int count);
void main()
{
int nCount;
cin>>nCount;
int nPeople;
int* nWeightOfPeople;
int* leftPart;
int* rightPart;
int rightTotal=0;
int leftTotal=0;
int* rightOfTotal=new int[nCount];
int* leftOfTotal=new int[nCount];
for(int k=0;k<nCount;k++)
{
cin.get();
cin>>nPeople;
if(nPeople%2==1)
{
nPeople++;
nWeightOfPeople=new int[nPeople];
for(int a=0;a<nPeople-1;a++)
cin>>nWeightOfPeople[a];
nWeightOfPeople[nPeople-1]=0;
}
else
{
nWeightOfPeople=new int[nPeople];
for(int a=0;a<nPeople;a++)
cin>>nWeightOfPeople[a];
}
sort(nWeightOfPeople,nPeople);
leftPart=new int[nPeople/2];
rightPart=new int[nPeople/2];
leftTotal=0;
rightTotal=0;
for(int j=0;j<nPeople;j++)
{
if(j<nPeople/2)
{
leftPart[j]=nWeightOfPeople[j];
leftTotal+=leftPart[j];
}
else
{
rightPart[j-nPeople/2]=nWeightOfPeople[j];
rightTotal+=rightPart[j-nPeople/2];
}
}
while(changeTwoPart(rightPart,leftPart,rightTotal-leftTotal,nPeople))
{
leftTotal=0;
rightTotal=0;
for(int i=0;i<nPeople/2;i++)
leftTotal+=leftPart[i];
for(int j=0;j<nPeople/2;j++)
rightTotal+=rightPart[j];
}
leftOfTotal[k]=leftTotal;
rightOfTotal[k]=rightTotal;
//cout<<endl<<leftTotal<<" "<<rightTotal<<endl;
}
for(int j=0;j<nCount;j++)
cout<<endl<<leftOfTotal[j]<<" "<<rightOfTotal[j];
cout<<endl;
}
bool changeTwoPart(int* right,int* left,int gap,int nPeople)
{
int nTempGap;
int nMaxGap=0;
int nMaxIndexI=0;
int nMaxIndexJ=0;
for(int i=0;i<(nPeople/2);i++)
{
for(int j=0;j<(nPeople/2);j++)
{
nTempGap= right[i] - left[j] ;
if(nTempGap*2 <= gap && nTempGap>= 0 && nTempGap>nMaxGap)
{
nMaxGap=nTempGap;
nMaxIndexI=i;
nMaxIndexJ=j;
}
}
}
if(nMaxGap>0)
{
changeTwoElement(right,nMaxIndexI,left,nMaxIndexJ);
return true;
}
return false;
}
void changeTwoElement(int* rightPart,int i,int* leftPart,int j)
{
int temp;
temp=rightPart[i];
rightPart[i]=leftPart[j];
leftPart[j]=temp;
}
//오름차순으로 정렬을 수행합니다.
void sort(int* array,int count)
{
for(int i=0;i<count;i++)
for(int j=i;j<count;j++)
{
if(array[i]>array[j])
changeTwoElement(array,i,array,j);
}
}
접근 방식이 굉장히 새로와서 놀랬어요~>__<ㅋ -
이승한