#include <stdio.h>
#define swap(a,b,t) (t=a, a=b, b=t) // swap 이렇게도 사용이 가능함
char num[7];
int change;
int len;
int max;
char res[7];
void cng(int step)
{
int tmp;
int i, j;
if ((step == change) || (step == len - 1)) // change 를 모두 썼거나, 4번을 바꿨으면 모두 바꾼 것.
{
tmp = 0;
for (i = 0; i < len; ++i)
tmp = tmp * 10 + num[i] - '0'; // char, string 으로 받아서, 10진수로 게산함
if (tmp > max)
{
for (i = 0; i <= len; ++i)
res[i] = num[i];
max = tmp; // 제일 큰 숫자를 기록함
}
return;
}
for (i = step; i < len; ++i)
{
for (j = i; j < len; ++j)
{
if (num[i] <= num[j])
{
swap(num[i], num[j], tmp);
cng(step + 1);
swap(num[i], num[j], tmp);
}
}
}
}
int main()
{
freopen("input.txt", "r", stdin);
int T, test_case;
int dif;
int tmp;
int i, j;
scanf("%d", &test_case);
for (T = 1; T <= test_case; ++T)
{
max = 0;
scanf("%s %d", num, &change);
for (len = 0; num[len] != '\0'; ++len);
cng(0);
dif = change - len + 1;
// 남은 change 갯수에 대해서 풀이하는 것
if (dif > 0)
{
for (i = 0; i < len; ++i)
{
for (j = i + 1; j < len; ++j)
{
if (res[i] == res[j])
dif = 0; // swap 필요 없음
}
}
}
if ((dif > 0) && (dif % 2 == 1)) // change 갯수가 남아있고, 그것이 홀수라면, 제일 마지막 2개 변경함
swap(res[len - 1], res[len - 2], tmp);
printf("#%d %s\n", T, res);
}
return 0;
}
댓글