코딩테스트/[백준] 코딩테스트 연습
빚 - 10427번
쵼쥬
2022. 4. 16. 20:32
package com.company;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int answer = 0;
List<Integer> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
list.add(Integer.parseInt(st.nextToken()));
}
list.sort(Collections.reverseOrder()); // 빚을 정렬
// M을 1부터 탐색하면서 추가적으로 갚아야 할 돈의 최소값 찾음
for (int i = 1; i < N; i++) {
long a = Long.MAX_VALUE;
long sum = 0;
int l = 0;
int r = 1;
while (r < N) {
sum += list.get(l) - list.get(r);
if (r - l == i) {
a = Math.min(sum, a);
l++;
sum -= (long) (list.get(l - 1) - list.get(l)) * i;
}
r++;
}
answer += a;
}
sb.append(answer).append("\n");
}
System.out.println(sb);
}
}