코테/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
반응형