import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
public
class
Main {
public
static
int
minimumCost(List<Integer> values) {
int
sum =
0
;
for
(
int
value : values) {
sum += value;
}
int
avg = sum / values.size();
int
cost =
0
;
for
(
int
value : values) {
cost += Math.abs(value - avg);
}
return
cost;
}
public
static
int
minCost(List<Integer> arr) {
Map<Integer, Integer> mp =
new
HashMap<>();
for
(
int
value : arr) {
mp.put(value, mp.getOrDefault(value,
0
) +
1
);
}
Map<Integer, List<Integer>> data =
new
HashMap<>();
for
(Map.Entry<Integer, Integer> entry : mp.entrySet()) {
int
frequency = entry.getValue();
int
value = entry.getKey();
data.computeIfAbsent(frequency, k ->
new
ArrayList<>()).add(value);
}
int
totalCost =
0
;
for
(Map.Entry<Integer, List<Integer>> entry : data.entrySet()) {
int
frequency = entry.getKey();
List<Integer> values = entry.getValue();
if
(values.size() >
1
) {
totalCost += frequency * minimumCost(values);
}
}
return
totalCost;
}
public
static
void
main(String[] args) {
List<Integer> arr =
new
ArrayList<>();
arr.add(
1
);
arr.add(
2
);
arr.add(
3
);
arr.add(
5
);
arr.add(
3
);
System.out.println(minCost(arr));
}
}