Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

으하하 공부일기

[SWEA] - 1983. 조교의 성적 매기기 (D2) 본문

SWEA/D2

[SWEA] - 1983. 조교의 성적 매기기 (D2)

0으하하0 2022. 4. 22. 18:02

[문제]

학기가 끝나고, 학생들의 점수로 학점을 계산중이다.
학점은 상대평가로 주어지는데, 총 10개의 평점이 있다.

학점은 학생들이 응시한 중간/기말고사 점수 결과 및 과제 점수가 반영한다.
각각 아래 비율로 반영된다.

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부터 시작한다.)



문제 풀기

1983. 조교의 성적 매기기

 


[풀이]

  • 점수의 총합을 result 배열에 넣고 K번재 학생의 점수를 저장해둔 후, result 배열을 내림차순 정렬한다.
  • 정렬된 배열에서 K번째 학생의 점수를 찾아서 등수를 알아낸다.
  • (N/10)명의 학생이 동일한 평점을 받을 수 있기 때문에 평점을 알아내기 위해 K번째 학생의 등수를 (N/10)으로 나눈값을 grade[] 배열의 인덱스 값으로 사용한다.
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

class Solution {
	public static void main(String[] args) throws Exception {		
		Scanner sc = new Scanner(System.in);
		
		String grade[] = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};
		
		int t = sc.nextInt();
		
		for(int tc=1; tc<=t; tc++) {
			int n = sc.nextInt();
			int k = sc.nextInt();
			
			Double result[] = new Double[n];
			double score = 0.0;
			
			for(int i=0; i<n; i++) {
				int m = sc.nextInt();
				int f = sc.nextInt();
				int h = sc.nextInt();
				
				result[i] = (m * 0.35) + (f * 0.45) + (h * 0.2);
				if(i+1 == k) score = result[i];
			}
			
			Arrays.sort(result, Collections.reverseOrder());
			
			int idx = 0;
			for(int i=0; i<n; i++) {
				if(result[i]==score) idx = i;
			}
			
			idx = idx / (n/10);
			
			System.out.format("#%d %s\n", tc, grade[idx]);
		}
	}
}