백준 - JAVA/정렬
[백준] 10825번 국영수 _ JAVA ( 주석 설명 )
wch_s
2023. 3. 6. 23:03
풀이
1) 학생들의 각 과목 점수를 배열에 저장한다.
or Student 클래스를 만들어 저장한다.
2) 문제의 조건에 맞게 Arrays.sort(ary, Comparator<>())를 이용해 정렬한다.
(오름차순인지 내림차순인지 유의해야 함!)
3) 문자열 정렬은 a.compareTo(b) 를 사용한다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
static String ary[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
ary = new String[N][4];
for(int i=0;i<N;++i){
st = new StringTokenizer(br.readLine());
ary[i][0] = st.nextToken();
ary[i][1] = st.nextToken();
ary[i][2] = st.nextToken();
ary[i][3] = st.nextToken();
}
solve(ary);
for(int i=0;i<N;++i){
System.out.println(ary[i][0]);
}
}
private static void solve(String[][] ary) {
Arrays.sort(ary, (a, b) -> {
//국어 점수가 같지 않으면 국어 점수가 감소하는 순서로
//내림차순
if(Integer.parseInt(a[1]) - Integer.parseInt(b[1])!=0)
return Integer.parseInt(b[1]) - Integer.parseInt(a[1]);
//국어 점수가 같고, 영어 점수가 같지 않으면 영어 점수가 증가하는 순서로
//오름차순
else if(Integer.parseInt(a[2]) - Integer.parseInt(b[2])!=0)
return Integer.parseInt(a[2]) - Integer.parseInt(b[2]);
//국어∙영어 점수가 같고, 수학 점수가 같지 않으면 수학 점수가 감소하는 순서로
//내림차순
else if(Integer.parseInt(a[3]) - Integer.parseInt(b[3])!=0)
return Integer.parseInt(b[3]) - Integer.parseInt(a[3]);
//모든 점수가 같으면, 이름의 사전 순으로 증가하는 순서로
//오름차순
else
return a[0].compareTo(b[0]);
});
}
}