[백준 5635번] 생일 with Java

guswls·2024년 5월 5일
0

알고리즘

목록 보기
16/39
post-custom-banner

문제


https://www.acmicpc.net/problem/5635



코드


import java.util.*;
import java.io.*;

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());

		List<Person> list = new ArrayList<>();
		for (int i = 0; i < N; i++) {
			String[] input = br.readLine().split(" ");
			list.add(new Person(input));
		}

		Collections.sort(list);

		System.out.println(list.get(N - 1));
		System.out.println(list.get(0));

	}

	static class Person implements Comparable<Person> {
		String name;
		int dd;
		int mm;
		int yy;

		Person(String[] input) {
			this.name = input[0];
			dd = Integer.parseInt(input[1]);
			mm = Integer.parseInt(input[2]);
			yy = Integer.parseInt(input[3]);
		}

		@Override
		public int compareTo(Person o) {
			if (this.yy == o.yy) {
				if (this.mm == o.mm) {
					return Integer.compare(this.dd, o.dd);
				}

				return Integer.compare(this.mm, o.mm);
			}

			return Integer.compare(this.yy, o.yy);
		}

		@Override
		public String toString() {
			return name;
		}
	}

}


문제 이해


  • 문제 그대로 이해하면 된다. dd mm yyyy의 형태로 입력을 받을 때 나이가 적은 사람과 나이가 많은 사람을 출력하면 된다.
  • 즉, 입력값에 대해서 오름차순 or 내림차순으로 정렬해서 제일 큰 수를 첫번쨰에, 제일 작은 수를 두번째에 출력하면 된다.


풀이 방법


  • 기본적으로 여러 기준들을 정렬해야하기 때문에 compareTo를 잘 구현하면 된다.
  • yy가 같으면 mm, mm도 같으면 dd까지 비교하는 식으로 구현하면 된다.
  • Collections.sort()Arrays.sort()가 더 빠르기 때문에 (TeamSort vs QuickSort의 차이) list에 객체를 담았다.


핵심 포인트


  • compareTo 잘 구현하기
  • 출력 순서 헷갈리지 않기


보완할 점 / 느낀 점


  • 문제에 대한 특별한 이해없이 바로 구현하면 되는 문제이다.


참고자료


profile
안녕하세요
post-custom-banner

0개의 댓글