본문 바로가기
알고리즘 풀이

[백준] 25206번: 너의 평점은 - java 풀이

by 코디드 2023. 6. 22.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		double creSum=0;
		double creGp=0;	
		
		for(int i=0; i<20; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			String subject = st.nextToken();
			double credit = Double.parseDouble(st.nextToken());
			String gp = st.nextToken();
			
			double gpNum=0.0;
			switch(gp) {
			case "A+": gpNum = 4.5;
				break;
			case "A0": gpNum = 4.0;
				break;
			case "B+": gpNum = 3.5;
				break;
			case "B0": gpNum = 3.0;
				break;
			case "C+": gpNum = 2.5;
				break;
			case "C0": gpNum = 2.0;
				break;
			case "D+": gpNum = 1.5;
				break;
			case "D0": gpNum = 1.0;
				break;
			case "F": gpNum = 0.0;
				break;
			case "P": gpNum = 0.0;
					credit=0;
				break;
			}
            
			creGp += credit * gpNum;
			creSum += credit;
            
		}
		System.out.println(creGp/creSum);
	}
}

 

StringTokenizer로 공백을 이용하여 토큰을 입력받을 때, 세번째 token인 등급은 문자로 입력받지만,

계산을 할때는 두번째 토큰인 학점과 곱하여야 하므로 정수 타입의 값을 등급에 맡게 설정해줘야 한다.

 

switch 문을 사용하면 간단하게 바꿔줄 수 있다. 

 

p/f 과목의 경우, F를 받았을 때와 마찬가지로 과목 평점을 0점 처리해주는데,  학점까지 0 점 처리 해줘야 성적에 반영되지 않는다. 그러므로, case P : 에 credit=0 까지 추가해줘야 한다.