백준

백준 10825 국영수(Java)

Park DJ 2023. 1. 27. 13:15

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

 

10825번: 국영수

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

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 Comparator를 사용하여 비교하면 풀 수 있습니다. 먼저 이중배열에 주어진 값들을 넣은 후 정렬하여 StringBuilder에 더한 후 출력하면 됩니다.

 


 

Java 코드

 


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

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();

    int n = sc.nextInt();
    String[][] arr = new String[n][4];
  
    for(int i = 0; i < n; i++) {
      arr[i][0] = sc.next();
      arr[i][1] = sc.next();
      arr[i][2] = sc.next();
      arr[i][3] = sc.next();
    }

    Arrays.sort(arr, new Comparator<String[]>() {
      public int compare(String[] s1, String[] s2) {
        if(s1[1].equals(s2[1])) {
          if(s1[2].equals(s2[2])) {
            if(s1[3].equals(s2[3])) {
              return s1[0].compareTo(s2[0]);
            }
            return Integer.parseInt(s2[3]) - Integer.parseInt(s1[3]);
          }
          return Integer.parseInt(s1[2]) - Integer.parseInt(s2[2]);
        }
        return Integer.parseInt(s2[1]) - Integer.parseInt(s1[1]);
      }
    });

    for(int i = 0; i < n; i++) {
      sb.append(arr[i][0]+"\n");
    }
    
    System.out.print(sb);
  }
}