2024.04.02
코딩테스트
[SWEA] JAVA 2단계
▶ 조교의 성적 매기기 [SWEA 1983]
import java.util.*;
import java.io.*;
// 10개의 평점 A+ A0 A- B+ B0 B- C+ C0 C- D0
// 총점 = 중간고사(35%) + 기말고사(45%) + 과제(20%)
// 10개의 평점을 총점이 높은 순으로 부여받는다.
// 그러나 N명의 학생이 있을 경우 N/10명의 학생들이 동일한 평점을 부여받는다.
// K번째 학생의 번호가 주어졌을 때, K번째 학생의 평점을 출력하는 프로그램을 작성.
class Solution {
public static void main(String args[]) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //읽는 라인
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //출력 라인
int T;
T=Integer.parseInt(bf.readLine());
String[] rank = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};
for(int test_case = 1; test_case <= T; test_case++) {
String s = bf.readLine();
StringTokenizer st = new StringTokenizer(s);
String sArr[] = s.split(" ");
int N = Integer.parseInt(sArr[0]);
int K = Integer.parseInt(sArr[1]);
Double[] total = new Double[N]; // 총점
for (int i = 0; i < N; i++){
String a = bf.readLine();
StringTokenizer st2 = new StringTokenizer(a);
String Arr[] = a.split(" ");
int mid = Integer.parseInt(Arr[0]); // 중간고사
int fin = Integer.parseInt(Arr[1]); // 기말고사
int ass = Integer.parseInt(Arr[2]); // 과제
total[i] = (mid*0.35) + (fin*0.45) + (ass*0.2);
}
Double[] totalCopy = total.clone(); // 총점 배열 복사
Arrays.sort(total,Collections.reverseOrder()); // 총점 배열 내림차순으로 정렬
List<Double> list = new ArrayList<>(); // 총점 배열을 리스트로 변환
for(Double d: total){
list.add(d);
}
int num = list.indexOf(totalCopy[K-1]); // K번째학생의 순위
int result = (num / (N / 10)); // K번째 학생이 부여 받을 평점
bw.write(String.valueOf("#" + test_case + " " + rank[result]));
bw.newLine();
}
bw.flush();
bw.close();
}
}
총점 배열을 int형식으로 하였더니 총점에 중복값이 발생하여, 오답이 발생하여, double 형식으로 변환하였더니, 내림차순 정렬이 되지 않았다. 래퍼 클래스인 Double로 바꿔서 실행하였더니 문제가 해결되었다.
'study' 카테고리의 다른 글
study - day12 (0) | 2024.04.03 |
---|---|
study - day10 (0) | 2024.04.01 |
study - day09 (0) | 2024.04.01 |
study - day08 (0) | 2024.04.01 |
study - day07 (1) | 2024.03.25 |