3통이므로 3! = 6 가지(모든경우)를 분석해보면 됨...
#include<stdio.h>
#include<string.h>
int tot[3],bin[3][3],chk[3];
unsigned int min;
char str[4]="BCG";
char res[4],minres[4];
void swap(int *p,int *q){
int temp;
temp=*p;
*p=*q;
*q=temp;
}
void reverse(int n,unsigned int sum){
int i;
if(n>=3){
if(sum < min){
min=sum;
res[n]='\0';
strcpy(minres,res);
}
else
return ;
}
else if(sum > min){
return ;
}
else{
for(i=0;i<3;i++){
if(chk[i]==0){
chk[i]=1;
res[n]=str[i];
reverse(n+1,sum+tot[i]-bin[n][i]);
chk[i]=0;
}
}
}
}
int main(void){
int i,j;
while(scanf("%d %d %d",&bin[0][0],&bin[0][1],&bin[0][2])==3){
swap(&bin[0][1],&bin[0][2]);
min=2147483649;
for(i=1;i<3;i++){
for(j=0;j<3;j++){
scanf("%d",&bin[i][j]);
}
swap(&bin[i][1],&bin[i][2]); // 알파벳 순서대로 하기 위해 바꿈
}
for(i=0;i<3;i++){
tot[i]=0;
for(j=0;j<3;j++){
tot[i]+=bin[j][i];
}
}
for(i=0;i<3;i++)
chk[i]=0;
reverse(0,0);
printf("%s %d\n",minres,min);
}
return 0;
}