문제
풀이
compare 함수에서 내림차순 정렬하고 싶을 때는 로직을 반대로 짜면 될 것 같았는데 내 예상이 맞았다.
String을 사전 순으로 정렬해야하는데 방법이 여러가지 일 것 같아서 찾아봤다.
String을 사전 순 정렬 하는 방법(참고한 글)
- stringArraySort()
- compareTo()
- Arrays.sort() -> 기본적으로 사전순 정렬된다.
String 두 개를 비교 해야하기 때문에 compareTo 메서드를 사용했다.
코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int N = sc.nextInt();
Student[] s = new Student[N];
for(int i=0; i<N; i++) {
s[i] = new Student(sc.next(), sc.nextInt(),sc.nextInt(),sc.nextInt());
}
//국어 점수가 감소하는 순서로, 같으면 영어 점수가 증가하는 순
//그것도 같으면 수학점수가 감소하는 순서로
//다 같으면 이름 사전 순으로 증가
Arrays.sort(s, new Comparator<Student>() {
@Override
public int compare(Main.Student o1, Main.Student o2) {
if(o1.g1 == o2.g1) {
//국어점수 같으면
if(o1.g2 == o2.g2) {
//영어점수 같으면
if(o1.g3 == o2.g3) {
return o1.name.compareTo(o2.name); //이름 사전 순
}
return o2.g3 - o1.g3;//수학점수 내림차순
}
return o1.g2 - o2.g2; //영어 점수 오름차순
}else {
return o2.g1 - o1.g1; //국어 점수 내림차순
}
}
});
for(int i=0; i<N; i++) {
//객체배열의 객체를 출력하면 toString()이 출력됨
sb.append(s[i]);
}
System.out.println(sb);
}
public static class Student{
String name;
int g1;
int g2;
int g3;
public Student(String name, int g1, int g2, int g3){
this.name = name;
this.g1 = g1;
this.g2 = g2;
this.g3 = g3;
}
public String toString() {
return name + "\n";
}
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 11652번 카드 (0) | 2022.05.23 |
---|---|
[PS] 백준 10989번 수 정렬하기 3 (0) | 2022.05.21 |
[PS] 백준 10814번 나이 순 정렬 (0) | 2022.05.19 |
[PS] 백준 11650번 좌표 정렬하기(Comparable과 Comparator) (0) | 2022.05.18 |
[PS] 백준 2751번 수 정렬하기 2 (0) | 2022.05.17 |