[알고리즘] 조교의 성적 매기기
in Algorithm on SWExpertAcademy, Algorithm
1983. 조교의 성적 매기기
삼성 SW Expert Academy 알고리즘 문제풀기 [D2]
(14:01~14:32) 31`m
학기가 끝나고, 학생들의 점수로 학점을 계산중이다.
학점은 상대평가로 주어지는데, 총 10개의 평점이 있다.
A+ A0 A- B+ B0 B- C+ C0 C- D0
학점은 학생들이 응시한 중간/기말고사 점수 결과 및 과제 점수가 반영한다.
각각 아래 비율로 반영된다.
총점 = 중간고사 (35%) + 기말고사 (45%) + 과제 (20%)
10 개의 평점을 총점이 높은 순서대로 부여하는데,
각각의 평점은 같은 비율로 부여할 수 있다.
예를 들어, N 명의 학생이 있을 경우 N/10 명의 학생들에게 동일한 평점을 부여할 수 있다.
입력으로 각각의 학생들의 중간, 기말, 과제 점수가 주어지고,
학점을 알고싶은 K 번째 학생의 번호가 주어졌을 때,
K 번째 학생의 학점을 출력하는 프로그램을 작성하라.
[제약사항]
N은 항상 10의 배수이며, 10이상 100이하의 정수이다. (10 ≤ N ≤ 100)
K는 1 이상 N 이하의 정수이다. (1 ≤ K ≤ N)
K 번째 학생의 총점과 다른 학생의 총점이 동일한 경우는 입력으로 주어지지 않는다.
[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.
테스트 케이스의 첫 번째 줄은 학생수 N 과, 학점을 알고싶은 학생의 번호 K 가 주어진다.
테스트 케이스 두 번째 줄 부터 각각의 학생이 받은 시험 및 과제 점수가 주어진다.
[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
> 입력
10
10 2
87 59 88
99 94 78
94 86 86
99 100 99
69 76 70
76 89 96
98 95 96
74 69 60
98 84 67
85 84 91
...
> 출력
#1 A-
...
import java.util.Scanner;
/* 19.08.20
* SW Expert Academy
* [1983] 조교의 성적 매기기
* 입력으로 각각의 학생들의 중간, 기말, 과제 점수가 주어지고,
* 학점을 알고싶은 K 번째 학생의 번호가 주어졌을 때,
* K 번째 학생의 학점을 출력하는 프로그램을 작성하라.
*/
public class Solution {
public static void main(String[] args) {
double mid = 0, fin = 0, ass = 0; // 중간 기말 과제
Scanner scanner = new Scanner(System.in);
int scanNum = scanner.nextInt(); // 테스트케이스 수
// 테스트 케이스만큼 loop
for(int test_case = 1; test_case < scanNum + 1; test_case++) {
int studentNum = scanner.nextInt(); // 학생 수
int search = scanner.nextInt(); // 학점이 궁금한 학생
int count = 0; // loop에 count
int persent = studentNum / 10;
double student_arr[] = new double[studentNum];
while (count < studentNum) {
mid = scanner.nextInt();
fin = scanner.nextInt();
ass = scanner.nextInt();
student_arr[count] = (mid * 0.35) + (fin * 0.45) + (ass * 0.20);
count++; // 다음 학생 배열 접근
}
double sort_student_arr[] = new double[studentNum]; // sorting할 배열 생성
for (int i = 0; i < student_arr.length; i++) {
sort_student_arr[i] = student_arr[i];
}
// sort
for (int i = 0; i < sort_student_arr.length; i++) {
for (int k = i; k < sort_student_arr.length; k++) {
if (sort_student_arr[i] < sort_student_arr[k]){
double temp = sort_student_arr[k];
sort_student_arr[k] = sort_student_arr[i];
sort_student_arr[i] = temp;
}
}
}
// 해당 학생 등수 구하기
int rank = 0;
String grade = null; // 학생 학점
for (int i = 0; i < student_arr.length; i++) {
if (student_arr[search-1] == sort_student_arr[i]) {
rank = i+1;
}
}
// 학점 구하기
if (rank <= persent) {
grade = "A+";
}
else if (rank <= persent*2) {
grade = "A0";
}
else if (rank <= persent*3) {
grade = "A-";
}
else if (rank <= persent*4) {
grade = "B+";
}
else if (rank <= persent*5) {
grade = "B0";
}
else if (rank <= persent*6) {
grade = "B-";
}
else if (rank <= persent*7) {
grade = "C+";
}
else if (rank <= persent*8) {
grade = "C0";
}
else if (rank <= persent*9) {
grade = "C-";
}
else if (rank <= persent*10) {
grade = "D0";
}
System.out.println("#" + test_case + " " + grade);
}
}
}