백준 - 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]);
        });
    }
}