#include <stdio.h>
#define N_MAX 10
int temp[N_MAX];
int buff[N_MAX] = { 0, };
void merge(int array[], int left, int mid, int right)
{
int i, j, k, m, l;
i = left;
j = mid + 1;
k = left;
while (i <= mid && j <= right) {
if (array[i] > array[j]) {
temp[k++] = array[i++];
}
else {
temp[k++] = array[j++];
}
}
while (i <= mid) {
temp[k++] = array[i++];
}
while (j <= right) {
temp[k++] = array[j++];
}
for (m = left; m <= right; m++) {
array[m] = temp[m];
}
}
void merge_sort(int array[], int left, int right)
{
int mid;
if (left < right) {
mid = (left+right) / 2;
merge_sort(array, left, mid);
merge_sort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
int main()
{
freopen("input.txt", "r", stdin);
int T;
scanf("%d\n", &T);
for (int t = 0; t < T; t++)
{
int N;
int sum = 0;
int max = 0;
int cnt = 0;
scanf("%d\n", &N);
for (int i = 0; i < N; i++) {
int n;
scanf("%d", &n);
if (n > max) max = n;
buff[n]++;
}
/*
merge_sort(buff, 0, N - 1);
for (int i = 0; i < N; i++) {
if ((i % 3) != 2)
sum += buff[i];
}
*/
for (int k = max; k > 0; k--) // 큰 수부터 하나씩 묶음
{
while (buff[k] > 0)
{
if ((cnt % 3) != 2) { // 이전에 묶은 것이 2개 이면,
sum += k;
}
buff[k]--;
cnt++;
}
}
printf("%d\n", sum);
}
return 0;
}
댓글