본문 바로가기

Algorithm/Baekjoon

[Baekjoon] 백준 5635번: 생일 (JAVA)

728x90

문제 5635번

 

5635번: 생일

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

www.acmicpc.net

[ 문제 풀이 ]

ArrayList<> 안에 넣어야 할 요소를 Student 클래스로 정의하고, Comparable을 implement 시켜 ArrayList<> 안에 요소를 넣을 때 정렬할 기준을 정의해줍니다.

나이가 적은 순으로 정렬하려면 연, 월, 일이 큰 순서대로(생일이 늦는 순서대로) 정렬 기준을 정의하면 됩니다. 입력받은 대로 ArrayList<>에 넣은 후, Collections.sort()을 사용하여 정의한 정렬 기준대로 정렬해줍니다.

[ 코드 ]

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {
    private static class Student implements Comparable<Student> {
        String name;
        int day, month, 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 s) {
            if (this.year == s.year) {
                if (this.month == s.month) {
                    return s.day - this.day;
                } else {
                    return s.month - this.month;
                }
            } else {
                return s.year - this.year;
            }
        }
    }

    private static ArrayList<Student> list = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            int day = Integer.parseInt(st.nextToken());
            int month = Integer.parseInt(st.nextToken());
            int year = Integer.parseInt(st.nextToken());
            list.add(new Student(name, day, month, year));
        }

        Collections.sort(list);
        bw.write(list.get(0).name + "\n" + list.get(list.size()-1).name);
        bw.flush();
    }
}
728x90