https://www.acmicpc.net/problem/10825
[문제]
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
[입력 조건]
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.
[코드]
import java.util.*;
class Subject_10825 implements Comparable<Subject_10825>{
String name;
int language;
int english;
int mathematic;
public Subject_10825(String name, int language, int english, int mathematic) {
this.name=name;
this.language=language;
this.english=english;
this.mathematic=mathematic;
}
@Override
public int compareTo(Subject_10825 o) {
if(this.language==o.language) {
if(this.english==o.english) {
if(this.mathematic==o.mathematic) {
// 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서대로 정ㄹ려
return this.name.compareTo(o.name);
}
// 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서대로 정렬
return o.mathematic-this.mathematic;
}
// 국어 점수가 같다면 영어 점수가 증가하는 순서대로 정렬
return this.english-o.english;
}
// 국어 점수가 감소하는 순서대로 정렬
return o.language-this.language;
}
}
public class BaekJoon_10825 {
static int n;
static ArrayList<Subject_10825> arr=new ArrayList<Subject_10825>();
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(int i=0;i<n;i++) {
String name=sc.next();
int lan=sc.nextInt();
int eng=sc.nextInt();
int math=sc.nextInt();
arr.add(new Subject_10825(name,lan,eng,math));
}
Collections.sort(arr); // 정렬
// 정렬된 결과에서 이름만 출력
for(int i=0;i<n;i++)
System.out.println(arr.get(i).name);
}
}
[고찰]
이번 문제는 입력받은 값들을 조건에 맞게 정렬해주면 끝인 간단한 문제이다. 각 학생의 이름, 국어, 영어, 수학 점수를 저장하는 클래스를 선언하고, Comparable를 사용하여 클래스 내에서 조건에 맞게 compareTo 함수를 오버라이딩 해주면 된다.
'백준' 카테고리의 다른 글
[백준_2217번] 로프 (0) | 2021.08.10 |
---|---|
[백준_18310번] 안테나 (0) | 2021.08.10 |
[백준_18405번] 경쟁적 전염 (0) | 2021.08.10 |
[백준_18352번] 특정 거리의 도시 찾기 (0) | 2021.08.07 |
[백준_11727번] 2Xn 타일링 2 (0) | 2021.08.07 |