문제
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
풀이
Collections.sort 의 정렬 기준을 재정의 해서 풀었다.
<코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class student{
String name;
int kor, eng, math;
public student(String name, int kor, int eng, int math) {
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}
public String getName() { return this.name;}
public int getKor() { return this.kor;}
public int getEng() { return this.eng;}
public int getMath() { return this.math;}
}
public class Main {
public static void main(String[] args) throws IOException{
int n;
List<student> list;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
list = new ArrayList<student>();
for(int i = 0 ; i < n ; i++) {
String[] line = br.readLine().split("\\s");
String name = line[0];
int kor = Integer.parseInt(line[1]);
int eng = Integer.parseInt(line[2]);
int math = Integer.parseInt(line[3]);
list.add(new student(name, kor, eng, math));
}
//정렬 기준 재정의
Collections.sort(list, new Comparator<student>() {
@Override
public int compare(student s1, student s2) {
if(s1.getKor() < s2.getKor()) {
return 1;
}
else if(s1.getKor() > s2.getKor()) {
return -1;
}
else {
if(s1.getEng() > s2.getEng()) {
return 1;
}
else if(s1.getEng() < s2.getEng()){
return -1;
}
else {
if(s1.getMath() < s2.getMath()) {
return 1;
}
else if(s1.getMath() > s2.getMath()) {
return -1;
}
else {
if(s1.getName().compareTo(s2.getName()) > 0) {
return 1;
}
else if(s1.getName().compareTo(s2.getName()) < 0)
return -1;
else
return 0;
}
}
}
}
});
StringBuilder sb = new StringBuilder();
for(student value : list) {
sb.append(value.getName()).append('\n');
}
System.out.println(sb);
}
}
'알고리즘 공부 > 정렬(Sort) | 분류' 카테고리의 다른 글
백준 10799 (쇠막대기) (0) | 2020.12.23 |
---|---|
백준 9012 (괄호) (0) | 2020.12.22 |
백준 11652 (카드) (0) | 2020.12.22 |
백준 11650(좌표 정렬하기) (0) | 2020.12.21 |
백준 2751 (정렬) (0) | 2020.12.18 |