Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

[24/12/5] String 임의기준 정렬 본문

카테고리 없음

[24/12/5] String 임의기준 정렬

성추 2024. 12. 5. 23:03

정렬방법을 따지는 문제는 아닌거같고 임의의 정렬이 나왔을때 어떻게 구현할건지에 대한 문제이다.

 

임의의 기준 정렬은 

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를 사용하여 그냥 깡구현했다.

 

다른풀이 봐도 다 이렇게 구현한듯