10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net
package 백준.자바.국영수_10825;
import java.io.*;
import java.util.*;
public class Main {
class Student{
String name;
int korean;
int english;
int math;
public Student(String name, int korean, int english, int math){
this.name = name;
this.korean = korean;
this.english = english;
this.math = math;
}
}
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
List<Student> std = new ArrayList<>();
for(int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int korean = Integer.parseInt(st.nextToken());
int english = Integer.parseInt(st.nextToken());
int math = Integer.parseInt(st.nextToken());
std.add(new Student(name, korean, english, math));
}
Collections.sort(std, new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2){
if(o1.korean != o2.korean){
return o2.korean - o1.korean;
}
else {
if(o1.english != o2.english){
return o1.english - o2.english;
}
else{
if(o1.math != o2.math){
return o2.math - o1.math;
}
else{
return o1.name.compareTo(o2.name);
}
}
}
};
});
StringBuilder sb = new StringBuilder();
for(var k : std){
sb.append(k.name+ "\n");
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception{
new Main().solution();
}
}
'문제풀이 > 백준' 카테고리의 다른 글
플로이드 11404 (0) | 2024.04.09 |
---|---|
최단경로 1753 (0) | 2024.04.09 |
둘만의 암호 Java (0) | 2024.02.25 |
한동이는공부가하기싫어! 3182 Java (0) | 2024.02.19 |
피보나치 수 2 2748 Java (0) | 2024.02.18 |