誕生日


質問する



誕生日

に近づく

  • 名、誕生日(年、月、日)を基に最年少、最多の人の名前を印刷します.
  • に言われているように並びます.
  • は入力情報が多く、管理を容易にするためにクラスを作成します.
  • sortを作る方法が一番重要ですか?
  • マイコード

    import java.io.*;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.StringTokenizer;
    
    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static ArrayList<Student> list = new ArrayList<>();
        public static void main(String[] args) throws IOException {
            int n = Integer.parseInt(br.readLine());
            StringTokenizer st;
            for (int i = 0; i < n; i++) {
                st = new StringTokenizer(br.readLine()," ");
                list.add(new Student(st.nextToken(), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
            }
            Collections.sort(list);
            System.out.println(list.get(0).getName());
            System.out.println(list.get(n-1).getName());
        }
    
        static class Student implements Comparable<Student> {
            private String name;
            private int day;
            private int month;
            private int year;
    
            public Student(String name, int day, int month, int year) {
                this.name = name;
                this.day = day;
                this.month = month;
                this.year = year;
            }
    
            @Override
            public int compareTo(Student o) {
                if (this.getYear() < o.getYear())
                    return 1;
                else if (this.getYear() > o.getYear()) {
                    return -1;
                } else if (this.getMonth() < o.getMonth()) {
                    return 1;
                } else if (this.getMonth() > o.getMonth()) {
                    return -1;
                } else if (this.getDay() < o.getDay()) {
                    return 1;
                }
                return -1;
            }
    
            public String getName() {
                return name;
            }
    
            public int getDay() {
                return day;
            }
    
            public int getMonth() {
                return month;
            }
    
            public int getYear() {
                return year;
            }
        }
    }
    入力値は
  • で、学生オブジェクトが作成され、ArrayListに挿入されてソートされます.
  • は簡単な問題ですが、この問題を単独で整理しなければならない理由は、後でもっと複雑な問題が要求されるのを見ると、対象を分けて適用することが多いので、これが基本功だと思ってまとめました.
  • 生成者とGetterパターンを開発するとよく使われますが…
  • と同様に,難易度の問題では,Comparableインタフェースを用いてoverrideソートを行うパターンがしばしば現れる.