출처 - https://www.acmicpc.net/problem/10825
[문제]
[문제풀이 전]
이코테 정렬파트에 나온 문제입니다. 문제를 봤을 때 학생 클래스 만들어서 요구한대로 정렬을 해주니 간단히 풀린 문제여서 크게 어렵지는 않았습니다. 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);
}
}
'백준 문제풀이' 카테고리의 다른 글
[백준1946] - 신입 사원 (0) | 2022.03.07 |
---|---|
[백준2667] - 단지 번호 붙이기 (JAVA) (0) | 2022.03.04 |
[백준 18428] - 감시 피하기(JAVA) (2) | 2022.02.10 |
[백준 18405] - 경쟁적 전염(JAVA) (0) | 2022.02.09 |
[백준 17070] - 파이프 옮기기(JAVA) (0) | 2022.01.29 |