우당탕탕 개발일지

[SWEA] 1983. 조교의 성적 매기기(Java, D2) 본문

코테/SW Expert Academy

[SWEA] 1983. 조교의 성적 매기기(Java, D2)

ujin302 2024. 4. 29. 19:18
반응형

문제

총점 = 중간(35) + 기말(45) + 과제(20)

10개의 평점
"A+", "A0", "A-", "B+", "B0", "B-", "c+", "C0", "C-", "D0"

 

10 개의 평점을 총점이 높은 순서대로 부여하는데, 각각의 평점같은 비율로 부여할 수 있다.
예를 들어, N 명의 학생이 있을 경우 N/10 명의 학생들에게 동일한 평점을 부여할 수 있다.

 

[ 입력값 ]

1. 입력으로 각각의 학생들의 중간, 기말, 과제 점수가 주어짐

2. 학점을 알고싶은 K 번째 학생의 번호 주어짐

 

K번째 학생의 평점을 구하여라

 

입출력 예

 

 

풀이

 

 

 

 

코드

Scanner sc = new Scanner(System.in);

        int tc = sc.nextInt();
        String[] str_finalScore = { "A+", "A0", "A-", "B+", "B0", "B-", "c+", "C0", "C-", "D0" }; // 학점

        for (int t = 0; t < tc; t++) {
            int n = sc.nextInt(); // 학생 수
            int k = sc.nextInt(); // 구해야 하는 학생 Index
            int result = -1;
            int[][] score = new int[n][3]; // 중간(35), 기말(45), 과제(20)
            HashMap<Integer, Double> indexFScoreMap = new HashMap<>(); // Key : index, value : 총점

            // 2차배열 초기화
            for (int a = 0; a < n; a++) {
                double finalScore = 0;
                for (int b = 0; b < 3; b++) {
                    score[a][b] = sc.nextInt();
                    switch (b) {
                        case 0: // 중간 (35)
                            finalScore += score[a][b] * 0.35;
                            break;

                        case 1: // 기말 (45)
                            finalScore += score[a][b] * 0.45;
                            break;

                        case 2: // 과제(20)
                            finalScore += score[a][b] * 0.20;
                            break;
                    }
                }
                indexFScoreMap.put(a + 1, finalScore);
            }

            // 내림차순
            List<Integer> keySort = new ArrayList<>(indexFScoreMap.keySet());
            Collections.sort(keySort, (o1, o2) -> (indexFScoreMap.get(o2).compareTo(indexFScoreMap.get(o1))));

            // key의 index (순위) 구하기
            int i = 0;
            for (Integer key : keySort) {
                if (key == k)
                    break;
                i++;
            }
            result = i / (n / 10);
            System.out.println("#" + (t + 1) + " " + str_finalScore[result]);
        }

 

 

SWEA 문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PwGK6AcIDFAUq

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

반응형