본문 바로가기
코딩테스트 준비/백준

[백준] 10825번 - 국영수 [Java]

by mwzz6 2025. 1. 4.

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

 

[백준] 10825번 - 국영수 [Java]
[백준] 10825번 - 국영수 [Java]


1.  아이디어

 

학생을 class로 만들고 Comparable 인터페이스를 구현해서 정렬 기준을 설정하는 방식으로 구현했다.


2. 문제풀이

 

compareTo 메서드에서 국어 성적이 다르면 내림차순, 영어 성적이 다르면 오름차순, 수학 성적이 다르면 내림차순, 모든 성적이 동일하면 이름에 대한 사전순으로 정렬하도록 반환하면 문제 조건에 맞게 정렬 기준을 설정할 수 있다.


3. 코드

 

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

public class Main {

    private static class Student implements Comparable<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;
        }

        @Override
        public int compareTo(Student o) {
            if (this.kor != o.kor) return Integer.compare(o.kor, this.kor);
            if (this.eng != o.eng) return Integer.compare(this.eng, o.eng);
            if (this.math != o.math) return Integer.compare(o.math, this.math);
            return this.name.compareTo(o.name);
        }
    }

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

        int N = Integer.parseInt(br.readLine());

        List<Student> students = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            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());

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

        Collections.sort(students);

        for (Student student : students) {
            sb.append(student.name).append("\n");
        }

        bw.write(sb.toString());
        bw.flush();
    }
}

4. 후기