[분류]
- 소팅
[문제링크]
[요구사항]
- 국어 점수가 감소하는 순서로 정렬한다.
- 국어 점수가 같으면 영어점수가 증가하는 순서로 정렬한다.
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로 정렬한다.
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 정렬한다.
단순히 조건에 맞추어 소팅을 하면된다.
[풀이]
- 빈 문자열이면 그대로 출력한다.
- v에 대해서 재귀적으로 solution 함수를 수행해준다.
- solution이 수행된 v와 u를 가지고 검사를 하고, 조건에 맞게 합치고 출력한다.
[코드]
//baekjoon_10825_국영수
import java.io.*;
import java.lang.*;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
static int n;
static ArrayList<Info> students = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
for(int i=0;i<n;i++){
String[] s = br.readLine().split(" ");
String name = s[0];
int kor = Integer.parseInt(s[1]);
int eng = Integer.parseInt(s[2]);
int math = Integer.parseInt(s[3]);
students.add(new Info(name, kor, eng, math));
}
Collections.sort(students);
for(int i=0;i<n;i++){
System.out.println(students.get(i).name);
}
}
public static class Info implements Comparable<Info>{
String name;
int kor;
int eng;
int math;
public Info(String name, int kor, int eng, int math){
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}
@Override
public int compareTo(Info o) {
if(this.kor<o.kor){
return 1;
}else if(this.kor == o.kor){
if(this.eng>o.eng){
return 1;
}else if(this.eng == o.eng){
if(this.math<o.math){
return 1;
}else if(this.math==o.math){
return this.name.compareTo(o.name);
}
}
}
return -1;
}
}
}
[통과여부]
[느낀점]
이 문제가 어려워서 한 것은 아니고 자바의 sorting하는 방법을 익히기 위해서 했는데 이제는 방법을 잊지 않고 잘할 수 있을 것 같다. 안 잊어버리도록 해야겠다.