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

풀이방법


최근 푼 문제들은 정렬 시리즈 인 것 같습니다.ㅎㅎㅎㅎ 아무튼! 오늘은 학생들의 국,영,수 점수를 입력받아서 조건에 따라 정렬을 하는 문제입니다. 학생 이름, 국어, 영어, 수학 점수를 갖는 Student 클래스를 만들고 List를 만들어서 add를 통하여 추가해줍니다.

그리고 Comparator를 이용해서 객체의 요소들끼리 비교를 통해서 원하는 정렬을 진행합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.io.*;
import java.util.*;

public class BOJ10825 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int N = Integer.parseInt(bf.readLine());
List<Student> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
String person = st.nextToken();
int korean_grade = Integer.parseInt(st.nextToken());
int english_grade = Integer.parseInt(st.nextToken());
int math_grade = Integer.parseInt(st.nextToken());
list.add(new Student(person, korean_grade, english_grade, math_grade));

}

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

if (o1.korean == o2.korean) {
if (o1.english == o2.english) {
if (o1.math == o2.math) {
// 이름에 대해서는 오름차순 정렬으로!

return o1.name.compareTo(o2.name);
} else if (o1.math > o2.math) {
return -1;
} else {
return 1;
}
} else if (o1.english > o2.english) {
return 1;
} else {
return -1;
}
} else if (o1.korean > o2.korean) {
return -1;
} else {
return 1;
}
}
});

for (int i = 0; i < list.size(); i++)
bw.write(list.get(i).name + "\n");

bw.flush();
bw.close();
bf.close();

}
}

class Student {
String name;
int korean;
int english;
int math;

public Student(String name, int korean, int english, int math) {
this.name = name;
this.korean = korean;
this.english = english;
this.math = math;
}
}

배운점


최근에 Comparator 혹은 Comparable을 구현해서 정렬하는 문제를 풀어보았는데, 잘 알아두면 추후에 유용하게 쓸 수 있을 것 같다는 생각이 듭니다. 이 문제는 조건에 따라서 if~else 문으로 분기하여 푸는 간단한 문제이지만, 나중에는 더 어려운 문제가 나올 것이므로 미리미리 이 개념을 익혀 두는 것이 도움이 될 것 같다고 느꼈습니다. :)