[알고리즘] 조교의 성적 매기기


SWEA

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 번째 학생의 학점을 출력하는 프로그램을 작성하라.

[제약사항]

  1. N은 항상 10의 배수이며, 10이상 100이하의 정수이다. (10 ≤ N ≤ 100)

  2. K는 1 이상 N 이하의 정수이다. (1 ≤ K ≤ N)

  3. 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);
        }
	}
}





© 2019. by jun108059

Powered by youngjun