카테고리 없음
[백준 2755] 이번학기 평점은 몇점?
vision333
2020. 10. 10. 14:06
728x90
문제
최백준이 이번 학기에 들은 과목과 학점 그리고 성적이 주어졌을 때, 평균 평점을 계산하는 프로그램을 작성하시오.
성적은 A+~F까지 총 13개가 있다.
A+: 4.3, A0: 4.0, A-: 3.7
B+: 3.3, B0: 3.0, B-: 2.7
C+: 2.3, C0: 2.0, C-: 1.7
D+: 1.3, D0: 1.0, D-: 0.7
F: 0.0
평균 평점은 각 과목의 학점*성적을 모두 더한 뒤에, 총 학점으로 나누면 된다.
입력
첫째 줄에, 백준이가 이번 학기에 들은 과목 수가 주어진다. 둘째 줄부터 N개의 줄에 각 과목의 과목명, 학점, 성적이 주어진다. 과목명은 알파벳 소문자와 숫자, 그리고 밑줄 (_)로만 이루어져 있으며, 최대 100글자이고, 학점은 1보다 크거나 같고, 3보다 작거나 같은 자연수이다. 성적은 문제에 설명한 13가지 중 하나이다.
풀이
입력에 과목을 받지만, 평점만 계산하면 되므로 신경쓸 필요는 없었다.
switch문을 통해 String으로 받은 성적을 float 점수로 바꿔줄 calc 함수 작성
과목, 학점, 점수를 입력 받고 학점*점수를 입력받을 때마다 더해나간다.
String.format으로 평점을 소수 둘째자리까지 출력한다.
코드
import java.util.Scanner;
public class B2755 {
public static float calc (String score){ // 성적을 점수로 반환
float scoreF = 0;
switch(score){
case "A+" : scoreF=4.3f; break;
case "A0" : scoreF=4.0f; break;
case "A-" : scoreF=3.7f; break;
case "B+" : scoreF=3.3f; break;
case "B0" : scoreF=3.0f; break;
case "B-" : scoreF=2.7f; break;
case "C+" : scoreF=2.3f; break;
case "C0" : scoreF=2.0f; break;
case "C-" : scoreF=1.7f; break;
case "D+" : scoreF=1.3f; break;
case "D0" : scoreF=1.0f; break;
case "D-" : scoreF=0.7f; break;
case "F" : scoreF=0.0f; break;
}
return scoreF;
}
public static void main(String[] args) {
Scanner scan = new Scanner (System.in);
int sub = scan.nextInt(); // 과목 수
float calcSum = 0; // 전체 성적의 합
int creditSum = 0; // 전체 학점의 합
for(int i=0; i<sub; i++){
String subject = scan.next(); // 과목
int credit = scan.nextInt(); // 학점
String score = scan.next(); // 성적
float scoreF = calc(score); // String 성적을 float로 변경
calcSum += credit*scoreF; // 학점 * 성적 을 합에 더하기
creditSum += credit; // 과목수 더하기
}
System.out.println(String.format("%.2f",(calcSum/creditSum))); // 소수점 둘째자리까지 출력
scan.close();
}
}
결과

728x90
반응형