본문 바로가기
study

study - day11

by hj_it 2024. 4. 3.

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