반응형
1. 문제
학기가 끝나고, 학생들의 점수로 학점을 계산중이다.
학점은 상대평가로 주어지는데, 총 10개의 평점이 있다.
학점은 학생들이 응시한 중간/기말고사 점수 결과 및 과제 점수가 반영한다.
각각 아래 비율로 반영된다.
10 개의 평점을 총점이 높은 순서대로 부여하는데,
각각의 평점은 같은 비율로 부여할 수 있다.
예를 들어, N 명의 학생이 있을 경우 N/10 명의 학생들에게 동일한 평점을 부여할 수 있다.
입력으로 각각의 학생들의 중간, 기말, 과제 점수가 주어지고,
학점을 알고싶은 K 번째 학생의 번호가 주어졌을 때,
K 번째 학생의 학점을 출력하는 프로그램을 작성하라.
https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
2. My 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Solution
{
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//grade(10개 등급) 리스트 미리 저장
String[] grade = new String[] {"A+","A0","A-","B+","B0","B-","C+","C0","C-","D0"};
//1. 테스트 케이스 받기
String test_case = br.readLine();
int test_case_int = Integer.parseInt(test_case);
for(int test=0;test<test_case_int;test++) {
//2. 학생수 / 학점을 알고 싶은 학생의 숫자
String stNum_student = br.readLine();
StringTokenizer st = new StringTokenizer(stNum_student);
int stNum=Integer.parseInt(st.nextToken());
int student = Integer.parseInt(st.nextToken());
//3. 입력한 학생수 (stNum)만큼
//중간고사 / 기말고사 / 과제를 입력받고 총점을 계산한다.
double[] st_total_score = new double[stNum+1]; //index 0을 사용하지 않을 생각
double qurious_st_score=0;
for(int i=1;i<stNum+1;i++) {
String score = br.readLine(); //학생의 점수 3가지를 받는다.
StringTokenizer score_3 = new StringTokenizer(score); //3가지 점수를 분리한다.
//중간고사 (35) / 기말고사(45) / 과제(20)
double middle_score = Double.parseDouble(score_3.nextToken())*0.35;
double final_score=Double.parseDouble(score_3.nextToken())*0.45;
double sub=Double.parseDouble(score_3.nextToken())*0.20;
st_total_score[i]=middle_score+final_score+sub;
//내가 학점을 알고싶은 학생(student)의 점수 저장!
if(student==i) {
qurious_st_score=st_total_score[i];
}
}
//4. 내가 학점을 알고싶은 학생(student)의 총점보다 높은 애가 몇명인가?
int upper_me_count=0;
for(int i=1;i<stNum+1;i++) {
if(qurious_st_score<st_total_score[i]) {
upper_me_count++;
}
}
//5. 학점 계산
//10명이면 10개 등급에 1명씩 할당 / 20이면 10개 등급에 2명씩 할당
int assign_num=stNum/10; //한 등급당 배치할 수 있는 명수 20명이면 2명씩 할당
int full_grade=upper_me_count/assign_num; //만약 10명중 나보다 높은 사람이 5명이면 5/1 = 5개 등급이 찬 것임
System.out.println("#"+(test+1)+" "+grade[full_grade]); //grade는 0번 인덱스부터임
}
}
}
반응형
'알고리즘 > SWEA' 카테고리의 다른 글
1210. Ladder1 (0) | 2023.02.15 |
---|---|
1979. 어디에 단어가 들어갈 수 있을까 (0) | 2023.02.15 |
14178. 1차원 정원 (0) | 2023.02.14 |
7272. 안경이 없어! (0) | 2023.02.14 |
16504. Gravity (0) | 2023.02.14 |