Algorithm/정렬(Sort)
[백준 2822번] 점수 계산(Java 풀이)
agility
2020. 2. 21. 21:57
백준알고리즘 2822번 : 점수 계산
8문제 중, 점수가 가장 높은 5개 문제의 점수만 합쳐서 출력하고
해당 문제들의 번호를 출력하는 문제이다.
각 점수만 주어지고, 순서는 주어지지 않기 때문에
점수와 순서를 field로 갖는 클래스를 생성하고, 해당 클래스가 Comparable 인터페이스를 implements(구현)하도록 한다.
클래스의 객체를 생성하고, instance 변수인 점수에는 Scanner로 받아오는 값을 담는다.
instance 변수인 점수는 직접 담아준다.
for문을 통해 점수를 받아오면서 총합을 구해놓고,
점수를 크기순으로 정렬한 뒤에 낮은 3개의 점수를 총합에서 뺴고 출력한다.
높은 점수의 순번을 다시 오름차순으로 정렬하여 출력한다.
소스 ▽
더보기
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) { // 2822번 점수 계산
Scanner sc = new Scanner(System.in);
int sum = 0;
List<remember> arr = new ArrayList<remember>();
for (int i = 1; i < 9; i++) {
remember rm = new remember();
rm.score = sc.nextInt();
rm.number = i;
arr.add(rm);
sum += rm.score;
}
arr.sort(Comparator.naturalOrder());
System.out.println(sum - arr.get(0).score - arr.get(1).score - arr.get(2).score);
List ar = new ArrayList();
for (int i = 3; i < 8; i++) {
ar.add(arr.get(i).number);
}
ar.sort(Comparator.naturalOrder());
for (int i = 0; i < 5; i++) {
System.out.print(ar.get(i) + " ");
}
}
}
class remember implements Comparable<remember> {
int score;
int number;
@Override
public int compareTo(remember o) {
if (this.score > o.score) {
return 1;
}
return -1;
}
}