카테고리 없음

[백준 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
반응형