문제 링크
5635번: 생일
어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제 설명
어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)
다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.
이름이 같거나, 생일이 같은 사람은 없다.
출력
첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.
구조화
정렬 문제, 년 월 일 순서로 비교하면서 정렬
내림차순, 오름차순 상관없이 맨앞과 맨뒤 출력
오답 노트
Comparator를 클래스에 정의하고 정렬하는 법을 배우자!
Comparable은 두 개로 비교 안됨
소스 코드 [PriorityQueue 사용]
import java.io.*;
import java.util.*;
public class Main {
public static class Node{
String name;
int day, mon, year;
public Node(String name, int day, int mon, int year) {
this.name = name;
this.day = day;
this.mon = mon;
this.year = year;
}
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
PriorityQueue<Node> students = new PriorityQueue<>(new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
if (o1.year == o2.year) {
if (o1.mon == o2.mon) {
return o2.day - o1.day;
}
else {
return o2.mon - o1.mon;
}
}
return o2.year - o1.year;
}
});
for (int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
int d = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
students.offer(new Node(str, d, m, y));
}
System.out.println(students.peek().name);
for (int i = 0; i < T-1; i++) {
students.poll();
}
System.out.println(students.peek().name);
}
}
메모리: 14148KB
시간: 120ms
소스 코드 [배열 정렬]
import java.io.*;
import java.util.*;
public class Main {
public static class Node{
String name;
int day, mon, year;
public Node(String name, int day, int mon, int year) {
this.name = name;
this.day = day;
this.mon = mon;
this.year = year;
}
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
Node[] students = new Node[T];
for (int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
int d = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
students[i] = new Node(str, d, m, y);
}
Arrays.sort(students, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
if (o1.year == o2.year) {
if (o1.mon == o2.mon) {
return o2.day - o1.day;
}
else {
return o2.mon - o1.mon;
}
}
return o2.year - o1.year;
}
});
System.out.println(students[0].name);
System.out.println(students[T-1].name);
}
}
메모리: 14076KB
시간: 124ms
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1715 카드 정렬하기 🃏 (Java) (1) | 2024.04.20 |
---|---|
[백준] 11729 하노이 탑 이동 순서 🗼 (Java) (0) | 2024.04.19 |
BOJ 2491 수열 📈📉 (0) | 2024.04.15 |
BOJ 2669 직사각형 네개의 합집합의 면적 구하기 📏 (1) | 2024.04.14 |
BOJ 28278 스택 2 🗑 (0) | 2024.04.12 |
문제 링크
5635번: 생일
어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제 설명
어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)
다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.
이름이 같거나, 생일이 같은 사람은 없다.
출력
첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.
구조화
정렬 문제, 년 월 일 순서로 비교하면서 정렬
내림차순, 오름차순 상관없이 맨앞과 맨뒤 출력
오답 노트
Comparator를 클래스에 정의하고 정렬하는 법을 배우자!
Comparable은 두 개로 비교 안됨
소스 코드 [PriorityQueue 사용]
import java.io.*;
import java.util.*;
public class Main {
public static class Node{
String name;
int day, mon, year;
public Node(String name, int day, int mon, int year) {
this.name = name;
this.day = day;
this.mon = mon;
this.year = year;
}
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
PriorityQueue<Node> students = new PriorityQueue<>(new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
if (o1.year == o2.year) {
if (o1.mon == o2.mon) {
return o2.day - o1.day;
}
else {
return o2.mon - o1.mon;
}
}
return o2.year - o1.year;
}
});
for (int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
int d = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
students.offer(new Node(str, d, m, y));
}
System.out.println(students.peek().name);
for (int i = 0; i < T-1; i++) {
students.poll();
}
System.out.println(students.peek().name);
}
}
메모리: 14148KB
시간: 120ms
소스 코드 [배열 정렬]
import java.io.*;
import java.util.*;
public class Main {
public static class Node{
String name;
int day, mon, year;
public Node(String name, int day, int mon, int year) {
this.name = name;
this.day = day;
this.mon = mon;
this.year = year;
}
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
Node[] students = new Node[T];
for (int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
int d = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
students[i] = new Node(str, d, m, y);
}
Arrays.sort(students, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
if (o1.year == o2.year) {
if (o1.mon == o2.mon) {
return o2.day - o1.day;
}
else {
return o2.mon - o1.mon;
}
}
return o2.year - o1.year;
}
});
System.out.println(students[0].name);
System.out.println(students[T-1].name);
}
}
메모리: 14076KB
시간: 124ms
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1715 카드 정렬하기 🃏 (Java) (1) | 2024.04.20 |
---|---|
[백준] 11729 하노이 탑 이동 순서 🗼 (Java) (0) | 2024.04.19 |
BOJ 2491 수열 📈📉 (0) | 2024.04.15 |
BOJ 2669 직사각형 네개의 합집합의 면적 구하기 📏 (1) | 2024.04.14 |
BOJ 28278 스택 2 🗑 (0) | 2024.04.12 |