CodingTEST

[SW Expert D2] 1983. 조교의 성적 매기기

경걍 2023. 11. 15. 18:25
반응형

1983. 조교의 성적 매기기 

 

SW Expert Academy

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

swexpertacademy.com

 

 

문제 분석

 

  • 성적은 A+부터 D0까지 10개의 평점으로 주어진다.
  • 성적은 상대평가며, 중간고사 (35%), 기말고사 (45%), 과제 (20%) 로 평가된다. 
  • N/10 명의 학생들이 동일한 평점을 받는다.
  • 학점을 알고 싶은 K번째 학생의 성적을 출력해라.

 

해결 포인트

 

  • 입력을 받으면서 각 학생들의 성적을 리스트에 담는다.
    • 성적 : results[i] = (midExam * 0.35) + (finalExam * 0.45) + (report * 0.2);
  • K 학생의 성적을 따로 저장한다. 
  • 성적을 정렬한다. (기본 정렬을 사용해서 오름차순 정렬된다.)
  • K 학생과 동일한 점수인 학생의 등수를 알아내 성적을 알아낸다.
    • 가장 낮은 성적에서부터 몇단계 높은지 : resultRanking = i / (N/10);  
      ex) D0 : 0, C+ : 3 
  • 성적은 Grade enum 클래스로 알아낸다. 
    • resultRanking와 ordinal() 값이 동일한 문자열을 알아낸다.

 

코드

 

import java.util.*;
import java.util.stream.Stream;
import java.io.*;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
 
        //System.setIn(new FileInputStream("res/input.txt"));
 
 
        Scanner sc = new Scanner(System.in);
        int T;
        T=sc.nextInt();
 
        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = sc.nextInt();
            int K = sc.nextInt();
             
            double [] results = new double[N];          
            for(int i=0;i<N;i++) {
                int midExam = sc.nextInt();
                int finalExam = sc.nextInt();
                int report = sc.nextInt();
                 
                results[i] = (midExam * 0.35) + (finalExam * 0.45) + (report * 0.2);
            }
             
            double wantStudentResult = results[K-1];
             
            Arrays.sort(results);
             
            int resultRanking = 0;
            for(int i=0;i<N;i++) {
                if(wantStudentResult == results[i]) {
                    resultRanking = i / (N/10);
                    break;
                }
            }
             
            System.out.printf("#%d %s\n", test_case, Grade.getGrade(resultRanking));
        }
    }
    public static enum Grade {
        D("D0"),
        C_MINUS("C-"),
        C("C0"),
        C_PLUS("C+"),
        B_MINUS("B-"),
        B("B0"),
        B_PLUS("B+"),
        A_MINUS("A-"),
        A("A0"),
        A_PLUS("A+");
         
        private final String grade;
        private Grade(String grade) {
            this.grade = grade;
        }
         
        static public String getGrade(int index) {
            Grade [] grades = values();
            for(Grade grade : grades) {
                if(grade.ordinal() == index)
                    return grade.grade;
            }
            return "";
        }
    }
}
반응형