본문 바로가기
코딩테스트/BOJ

[백준] 10825번 - 국영수

by 의정부핵꿀밤 2022. 9. 29.
728x90

https://www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net


정렬 문제였다

Arrays.sort() 메서드와 new Comparator<String>을 사용하고 compare 함수를 오버라이딩해서 사용했다

 

 

 

자바 코드)

package boj;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class boj10825 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        String[][] arr = new String[n][4];

        for(int i=0;i<n;i++) {
            arr[i][0] = scanner.next();
            arr[i][1] = scanner.next();
            arr[i][2] = scanner.next();
            arr[i][3] = scanner.next();
        }

        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if(o1[1].equals(o2[1])) { //국어
                    if(o1[2].equals(o2[2])) { //영어
                        if(o1[3].equals(o2[3])) { //수학
                            return o1[0].compareTo(o2[0]); //이름 오름차순
                        } else {
                            return Integer.parseInt(o2[3]) - Integer.parseInt(o1[3]); //수학 내림차순
                        }
                    } else {
                        return Integer.parseInt(o1[2]) - Integer.parseInt(o2[2]); //영어 오름차순
                    }
                } else {
                    return Integer.parseInt(o2[1]) - Integer.parseInt(o1[1]); //국어 내림차순
                }
            }
        });

        for(int i=0;i<n;i++) {
            System.out.println(arr[i][0]);
        }
    }
}
728x90

댓글