반응형
https://www.acmicpc.net/problem/10825
import java.io.*;
import java.util.*;
public class Main {
static int N;
static List<Student> students = new ArrayList<>();
static StringBuilder sb = new StringBuilder();
static int stoi(String s) {
return Integer.parseInt(s);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = stoi(st.nextToken());
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
Student student = new Student(st.nextToken(), stoi(st.nextToken()), stoi(st.nextToken()), stoi(st.nextToken()));
students.add(student);
}
Collections.sort(students);
for (Student student : students) {
sb.append(student.name).append("\n");
}
System.out.println(sb);
}
static class Student implements Comparable<Student> {
String name;
int korean, english, math;
public Student(String name, int korean, int english, int math) {
this.name = name;
this.korean = korean;
this.english = english;
this.math = math;
}
@Override
public int compareTo(Student o) {
if (this.korean != o.korean) {
return Integer.compare(o.korean, this.korean);
}
if (this.english != o.english) {
return Integer.compare(this.english, o.english);
}
if (this.math != o.math) {
return Integer.compare(o.math, this.math);
}
return this.name.compareTo(o.name);
}
}
}
따로 Student 객체를 만들어주었다.
그리고 내 사랑 Comparable<T> 인터페이스를 구현해서 정렬 기준을 구현해주었다.
조기리턴으로다가
국어점수가 같지 않으면 내림차순으로 리턴 (이후는 국어점수가 같은 경우)
영어점수가 같지 않으면 오름차순으로 리턴 (이후는 국어, 영어 점수가 같은 경우)
수학점수가 같지 않으면 내림차순으로 리턴 (이후는 국어, 영어, 수학 점수가 같은 경우)
String 타입의 compareTo 메서드를 통한 사전순 리턴
순서로 구현해주었다.
이후에 입력을 받아 Student 리스트에 넣어주었고,
정렬 후 출력해주었다.
반응형
'알고리즘 🤔' 카테고리의 다른 글
[백준 자바 1202] 보석 도둑 (골드2) (0) | 2024.07.04 |
---|---|
[백준 자바 11655] ROT13 (브론즈1) (1) | 2024.06.28 |
[백준 자바 1076] 저항 (브론즈2) (0) | 2024.06.26 |
[백준 자바 1977] 완전제곱수 (브론즈2) (0) | 2024.06.25 |
[백준 자바 1145] 적어도 대부분의 배수 (브론즈1) (0) | 2024.06.23 |