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
- 가장 낮은 성적에서부터 몇단계 높은지 : resultRanking = i / (N/10);
- 성적은 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 "";
}
}
}
반응형