걸음마부터 달리기
[24/12/5] String 임의기준 정렬 본문
정렬방법을 따지는 문제는 아닌거같고 임의의 정렬이 나왔을때 어떻게 구현할건지에 대한 문제이다.
임의의 기준 정렬은
1) Comparator<>() {
public int compare(T o1, T o2) {
~
}
}
를 통해 정렬기준을 오버라이딩 및 익명객체로
Arrays.sort에 전달
2) String의 사전식 정렬은 이미 Comparable의 compareTo 메서드에 구현이 되어있다.
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n =Integer.parseInt(st.nextToken());
String[] arr = new String[n];
for(int i =0; i<n; i++){
st = new StringTokenizer(br.readLine());
arr[i]=st.nextToken();
}
Arrays.sort(arr,new Comparator<String>(){
public int compare(String s1, String s2){
if(s1.length()!=s2.length()){
if(s1.length()>s2.length()){
return 1;
}
else {
return -1;
}
}
else if(s1.length()==s2.length()){
char[] s1Arr= s1.toCharArray();
char[] s2Arr = s2.toCharArray();
int s1Total=0;
int s2Total=0;
for(int i=0; i<s1Arr.length; i++){
if(s1Arr[i]>='0' && s1Arr[i]<='9'){
s1Total+=s1Arr[i]-'0';
}
if(s2Arr[i]>='0' && s2Arr[i]<='9'){
s2Total+=s2Arr[i]-'0';
}
}
if(s1Total!=s2Total){
if(s1Total>s2Total){
return 1;
} else{
return -1;
}
}
else{
return s1.compareTo(s2);
}
}
return 0;
}
});
BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
for(int i=0;i<arr.length; i++){
bw.write(arr[i]+"\n");
}
bw.flush();
bw.close();
}
}
내가 풀때는 중첩 if를 사용하여 그냥 깡구현했다.
다른풀이 봐도 다 이렇게 구현한듯