정렬이 여러개 나올때 오랜만에 나온거라 기억이 나지 않았다.. 잘 기억해 두기로 하자..
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;
public class Main
{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inDataCount = Integer.parseInt(br.readLine());
List<String> list = new ArrayList<>();
for(int i=0; i<inDataCount;i++){
list.add(br.readLine());
}
Collections.sort(list, new ListComparator());
for(String str : list){
System.out.println(str);
}
}
static class ListComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
int lengthComparison = Integer.compare(a.length(), b.length());
if (lengthComparison != 0) {
return lengthComparison;
}
int sumA = calculateSumOfDigits(a);
int sumB = calculateSumOfDigits(b);
int sumComparison = Integer.compare(sumA, sumB);
if (sumComparison != 0) {
return sumComparison;
}
return a.compareTo(b);
}
private int calculateSumOfDigits(String str) {
int sum = 0;
for (char c : str.toCharArray()) {
if (Character.isDigit(c)) {
sum += Character.getNumericValue(c);
}
}
return sum;
}
}
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] serialNumbers = new String[n];
for (int i = 0; i < n; i++) {
serialNumbers[i] = br.readLine();
}
Arrays.sort(serialNumbers, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// 길이가 짧은 시리얼 번호가 먼저 오도록 정렬
if (s1.length() != s2.length()) {
return s1.length() - s2.length();
}
// 길이가 같다면 각 시리얼 번호의 숫자 합을 비교하여 정렬
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < s1.length(); i++) {
if (Character.isDigit(s1.charAt(i))) {
sum1 += s1.charAt(i) - '0';
}
if (Character.isDigit(s2.charAt(i))) {
sum2 += s2.charAt(i) - '0';
}
}
// 숫자 합이 다르면 숫자 합이 작은 순으로 정렬
if (sum1 != sum2) {
return Integer.compare(sum1, sum2);
}
// 숫자 합이 같다면 사전순으로 정렬
return s1.compareTo(s2);
}
});
for (String serialNumber : serialNumbers) {
System.out.println(serialNumber);
}
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
String[] serial = new String[N];
while (N-->0) serial[N] = br.readLine();
Arrays.stream(serial).sorted(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length()==o2.length()){
int fst = Arrays.stream(o1.split(""))
.filter(str->str.matches("^[0-9]+$"))
.mapToInt(Integer::parseInt)
.sum();
int sec = Arrays.stream(o2.split(""))
.filter(str->str.matches("^[0-9]+$"))
.mapToInt(Integer::parseInt)
.sum();
if (fst==sec) return o1.compareTo(o2);
return fst-sec;
}
return o1.length()-o2.length();
}
}).forEach(str->sb.append(str+"\n"));
System.out.print(sb);
}
}