문제링크 : https://www.acmicpc.net/problem/10825
10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net
접근 과정 :
- 정렬을 위한 비교 메소드를 사용할 수 있는지 묻는 문제인것 같다.
- 국어, 영어, 수학, 이름 순으로 비교를 해야하고 점수는 숫자이지만 이름은 문자이다.
- 한번에 비교하고자, score 클래스를 만들어서 사용했다.
- 조건에 맞게 비교 우위를 설정하고 우선순위 큐에 집어넣어서 출력했다.
소스 코드 및 결과 :
package BOJ;
/*
국영수
*/
import java.io.*;
import java.util.*;
public class BOJ10825 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
PriorityQueue<score> pq = new PriorityQueue<>();
for(int i = 0; i<N; i++){
st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int korean = Integer.parseInt(st.nextToken());
int english = Integer.parseInt(st.nextToken());
int math = Integer.parseInt(st.nextToken());
pq.add(new score(name, korean, english, math));
}
StringBuilder sb= new StringBuilder();
while (!pq.isEmpty()) {
sb.append(pq.poll().name).append("\n");
}
System.out.println(sb.toString());
}
private static class score implements Comparable<score> {
String name;
int korean;
int english;
int math;
score(String name, int korean, int english, int math) {
this.name = name;
this.korean = korean;
this.english = english;
this.math = math;
}
@Override
public int compareTo(score s) {
if (s.korean == korean) {
if (s.english == english) {
if (s.math == math) {
return name.compareTo(s.name);
}
return s.math - math;
}
return english - s.english;
}
return s.korean - korean;
}
}
}
P.S
평소에 알고리즘을 풀 때에는, 클래스에 비교 메소드를 오버라이드 하지 않고,
우선순위 큐나 리스트, 배열의 sort 연산에서 람다식을 이용해서 정렬 조건을 정의한다.
쓰임새에 따라 다르겠지만, 정렬 조건이 바뀔 일이 없다면 지금처럼 클래스에 정의해주는 것이 좀 더 깔끔한 것 같기도.?
'Algorithm' 카테고리의 다른 글
[백준 Gold 1] 10868 최솟값 - Java (0) | 2022.01.10 |
---|---|
[백준 Silver 1] 11048 이동하기 - Java (0) | 2022.01.07 |
[백준 Silver 3] 3085 사탕 게임 - Java (0) | 2022.01.07 |
[백준 Gold 1] 2213 트리의 독립집합 - Java (0) | 2022.01.06 |
[백준 Gold 1] 1949 우수 마을 - Java (0) | 2022.01.05 |