BOJ

[백준 25206번/JAVA] 너의 학점은

syj0522 2024. 3. 13. 22:31

문제

https://www.acmicpc.net/problem/25206

 

풀이

switch문을 사용하는 간단한 문제이다.
학점 * 과목평점의 합 / 학점의 총합
p등급은 계산에서 제외

코드

import java.util.*;
import java.io.*;

public class Main {    
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        //20줄 입력받기
        //등급 전평으로 바꾸기
        //학점*과목평점의 합 / 학점의 총합 출력

        int N = 20;
        double sum1 = 0; //학점*과목평점의 합
        double sum2 = 0; //학점의 총합

        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());

            String subject = st.nextToken();
            double credit = Double.parseDouble(st.nextToken()); //학점
            double grade = gradeIs(st.nextToken()); //과목평점

            if(grade != -1) {
                sum1 += (credit*grade);
                sum2 += credit;
            }
        }
        bw.write(sum1/sum2 + " ");
        bw.close();
    }

    //전공 평점 반환기
    static double gradeIs(String str) {
        switch(str) {
        case "A+":
            return 4.5;
        case "A0":
            return 4.0;
        case "B+":
            return 3.5;
        case "B0":
            return 3.0;
        case "C+":
            return 2.5;
        case "C0":
            return 2.0;
        case "D+":
            return 1.5;
        case "D0":
            return 1.0;
        case "F":
            return 0.0;
        }
        return -1;
    }

}

Note

switch문의 인자로 가능한 타입은 정해져있다. byte, short, char, int, String 등
switch문에서 문자열을 비교할 때는 내부적으로 equals를 쓴다.
break는 해당 switch문을 탈출하는 용도이다.
case 옆의 변수는 final(불변, 상수)이어야 한다.