백준 문제풀이

[백준 10825] - 국영수(JAVA)

쿠쿠s 2022. 2. 13. 23:08

출처 - https://www.acmicpc.net/problem/10825

 

10825번: 국영수

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

www.acmicpc.net

[문제] 


 

 

[문제풀이 전]

 

이코테 정렬파트에 나온 문제입니다. 문제를 봤을 때 학생 클래스 만들어서 요구한대로 정렬을 해주니 간단히 풀린 문제여서 크게 어렵지는 않았습니다. Comparator에 익숙치 않았다면 힘들었을지도..? 

 

 

 


 

 

[문제풀이] 

 

문제의 요구번호대로 따라가서 정렬기준을 오버라이드 해주면 쉽게 풀리는 문제입니다.

만약 Comparator 를 모르신다면 https://st-lab.tistory.com/243 에서 참고하시면 좋을 것 같습니다.

그외는 리스트에 넣고 정렬후 출력이라 어려운 부분이 없어 더 설명이 필요하지는 않을 것 같습니다.

 

  • 리스트에 담을 학생 클래스 만들기
  • 문제에서 입력받은 학생 정보를 객체를 만들어 리스트에 담기
  • 리스트에 담은 정보들 오버라이드 하여 정렬 기준 재정의
  • 정렬된 리스트 출력

 

 

[소스코드] 

import java.io.*;
import java.util.*;

public class Main {

    static class Student{
        String name;
        int kor;
        int eng;
        int math;

        public Student(String name, int kor, int eng, int math) {
            this.name = name;
            this.kor = kor;
            this.eng = eng;
            this.math = math;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        ArrayList<Student> list = new ArrayList<>();
        int n = Integer.parseInt(br.readLine());

        while (n-- > 0) {
            st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            int kor = Integer.parseInt(st.nextToken());
            int eng = Integer.parseInt(st.nextToken());
            int math = Integer.parseInt(st.nextToken());

            list.add(new Student(name, kor, eng, math));
        }

        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {

                if (o1.kor == o2.kor) {
                    if (o1.eng == o2.eng) {
                        if (o1.math == o2.math) {
                            return o1.name.compareTo(o2.name);
                        }
                        return o2.math - o1.math;
                    }
                    return o1.eng - o2.eng;
                }
                return o2.kor - o1.kor;
            }
        });

        StringBuilder sb = new StringBuilder();
        for (Student student : list) {
            sb.append(student.name).append('\n');
        }

        System.out.println(sb);

    }
}