#include <stdio.h>
#define MAX 10
int INPUT[MAX];
void qsort(int *arr, int left, int right);
int solve(int cnt);
int isValid(int value);
int main(void)
{
freopen("input.txt", "r", stdin);
int test_case;
int T;
setbuf(stdout, NULL);
scanf("%d", &T);
for (test_case = 1; test_case <= T; ++test_case)
{
int cnt;
scanf("%d", &cnt);
for (int i = 0; i < cnt; i++) {
scanf("%d", &INPUT[i]);
}
qsort(INPUT, 0, cnt);
int answer = solve(cnt);
printf("#%d %d\n", test_case, answer);
}
return 0;
}
int solve(int cnt)
{
int ret = -1;
for (int i = 0; i < cnt - 1; i++) {
for (int j = i + 1; j < cnt; j++)
{
int mul = INPUT[i] * INPUT[j];
if (isValid(mul)) { // 유효성 검사는 10디짓으로 검사, 최댓값을 찾기
if (ret < mul) {
ret = mul;
break;
}
}
if (mul < ret) break;
}
}
return ret;
}
int isValid(int value)
{
int ret = 1;
int preVal = 10;
while (value >= 10) {
int curVal = value % 10; // 뒤에자리 수
if (curVal > preVal) { // 앞 자리수와 뒷 자리수 비교
ret = 0;
break;
}
preVal = curVal;
value /= 10;
}
if (ret) {
if (value > preVal) ret = 0;
}
return ret;
}
void qsort(int *arr, int left, int right) {
int i = left;
int j = right;
int temp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] > pivot) ++i;
while (arr[j] < pivot) --j;
if (i <= j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (j > left) qsort(arr, left, j);
if (i < right) qsort(arr, i, right);
}
댓글