728x90
🔗 문제 링크
https://www.acmicpc.net/problem/5635
📌 문제 개요
이 문제는 N명의 이름과 생년월일이 주어졌을 때,
가장 나이가 많은 사람과 가장 어린 사람의 이름을 구하는 문제
📌접근 방법
이 문제는 정렬을 활용해서 해결
사람마다 이름, 일, 월, 년 정보를 하나로 묶어 관리해야 하므로
Person 객체를 만들어 저장
이후 생년월일을 기준으로 년 → 월 → 일 순서로 오름차순 정렬하면
가장 앞에는 가장 나이가 많은 사람,
가장 뒤에는 가장 어린 사람이 오게 된다.
📌핵심 아이디어
이 문제의 핵심은 생년월일 비교 기준을 정확하게 세우는 것
- 년도가 작은 사람이 더 나이가 많다
- 년도가 같으면 월 비교
- 월도 같으면 일 비교
- 정렬 후 첫 번째와 마지막 사람을 출력하면 된다
📌전체 코드
import java.io.*;
import java.util.*;
public class Main {
static class Person {
String name;
int d, m, y;
public Person(String name, int d, int m, int y) {
this.name = name;
this.d = d;
this.m = m;
this.y = y;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Person[] arr = new Person[N];
for(int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int d = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arr[i] = new Person(name, d, m, y);
}
Arrays.sort(arr, (a, b) -> {
if(a.y != b.y) return a.y - b.y;
if(a.m != b.m) return a.m - b.m;
return a.d - b.d;
});
System.out.println(arr[N - 1].name);
System.out.println(arr[0].name);
}
}
📄 정리
이 문제는 정렬 기준만 정확히 세우면 쉽게 해결할 수 있는 문제
날짜 비교 문제에서는 항상 년 → 월 → 일 순서로 비교하는 습관을 들이면 좋다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 백준 24262 알고리즘 수업 - 알고리즘의 수행 시간 1 JAVA 풀이 (수학, 시간복잡도) (0) | 2026.03.29 |
|---|---|
| 백준 11931 수 정렬하기 4 JAVA 풀이 (정렬, 시간복잡도) (0) | 2026.03.28 |
| 백준 9656 돌 게임 2 JAVA 풀이 (게임이론, 시간복잡도) (0) | 2026.03.26 |
| 백준 2669 직사각형 네 개의 합집합의 면적 JAVA 풀이 (브루트포스, 구현, 시간복잡도) (0) | 2026.03.25 |
| 백준 13909 창문 닫기 JAVA 풀이 (수학, O(1)) (0) | 2026.03.24 |
