[伯俊]年齢順(Java)


アルゴリズムの問題解決をブログにアップロードしたのは、コードを解答し、記録するためです.
これからは質問を吹き飛ばすよりも、リンクだけを残して、答えを見極めるために、私たちは皆さんに位置づけます!

📄 質問する


[伯俊]年齢順

👩‍💻 に答える


1.問題を理解する


この質問には、<年齢、名前>の値が入力されます.
  • 年齢順
  • 年齢が同じ場合は入力順
    ソート出力の問題.
  • 2.String[]+compareメソッド上書き

  • Stringタイプの2次元配列に年齢と名前を格納
  • Comparator의 compare 메소드override年齢順
  • 年齢順に並べ、名前を比較しなければ年齢順に並べ、年齢が同じなら入力順に並べ
  • import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.StringTokenizer;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
    
            int N = Integer.parseInt(br.readLine());
            String[][] arr = new String[N][2];
    
            for(int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                arr[i][0] = st.nextToken();
                arr[i][1] = st.nextToken();
            }
    
            Arrays.sort(arr, new Comparator<String[]>() {
                @Override
                public int compare(String[] o1, String[] o2) {
                    return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
                }
            });
    
            StringBuilder sb = new StringBuilder();
    
            for(int i =0; i < N; i++) {
                sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
            }
    
            System.out.println(sb);
        }
    }

    3. String[][] + Comparator.comparingInt()

  • Stringタイプの2次元配列に年齢と名前を格納
  • Comparator의 comparingInt 메소드+람다식年齢順
    実は今回初めてComparatorで練習のために上のパズルをランダ式スマートなIntellieJに変えてこの方法hooをお勧めしました!
  • 上記と同様、年齢が同じ場合は入力順に並べ替える
  • import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.StringTokenizer;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
    
            int N = Integer.parseInt(br.readLine());
            String[][] arr = new String[N][2];
    
            for(int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                arr[i][0] = st.nextToken();
                arr[i][1] = st.nextToken();
            }
    
            Arrays.sort(arr, Comparator.comparingInt(o -> Integer.parseInt(o[0])));
    
            StringBuilder sb = new StringBuilder();
    
            for(int i =0; i < N; i++) {
                sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
            }
    
            System.out.println(sb);
        }
    }

    4.StringBuilder(最適なパフォーマンス)👍)


    コードソース:Stranger's LAB
    st(ニックネームはこれですか…?のStranger's LABでは、問題の複数の解法があります.
    最後に各解答の性能を比較し、問題を解いた後もよく見学します.
    今回も全く思いもよらなかった驚くべき謎を発見し、クローンを作りながら理解しようと努力しました!
  • 入力年齢範囲に等しいサイズのStringBuilderアレイを作成する
  • このアレイ内にStringBuilderを作成してマウント
  • 年齢値をインデックスに配列の位置を指定して入力値を追加
  • 基本的にはインデックスの年齢によるソートであり、年齢が同じであれば先に入力して入力するので、他のソートプロセスがない場合はソートする
  • StringBuilderを含むアレイでループし、アレイ全体を追加して出力
  • import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
    
            int N = Integer.parseInt(br.readLine());
    
            // 입력되는 나이의 범위 : 1 ~ 200
            StringBuilder[] sba = new StringBuilder[201];
    
            for(int i = 0; i < sba.length; i++) {
                sba[i] = new StringBuilder();
            }
    
            for(int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                int age = Integer.parseInt(st.nextToken());
                String name = st.nextToken();
    
                sba[age].append(age).append(" ").append(name).append("\n");
            }
    
            StringBuilder sb = new StringBuilder();
            for(StringBuilder s : sba) {
                sb.append(s);
            }
    
            System.out.println(sb);
        }
    }