[JAVA] 너의 평점은

NoHae·2025년 8월 21일

백준

목록 보기
68/106

문제 출처

단계별로 풀어보기 > 심화 1 > 너의 평점은
https://www.acmicpc.net/problem/25206

문제 설명

전공평점을 계산하는 프로그램을 작성하라.
전공과목별 점수는 학점 x 과목평점이고,
전공평점은 전공과목별의 함을 학점의 총합으로 나눈 값이다.
전공평점을 출력하되, 소수 6자리까지 출력하라.

접근 방법

과목명의 경우 따로 중요하지 않으므로 저장하지 않는다.
각 과목의 학점을 저장하는 credit에 학점을 저장하고, grade의 치훈이의 등급을 저장하여 어떤 등급인지에 대해서 score에 변환하여 저장한다. 변환할 때는 switch case문을 이용한다.
이 후, 총 학점 계산인 gpa에 credit * score 값을 저장하고, 총 학점 값을 저장할 total에 credit을 각각 저장한다.
이 후, gpa가 0임을 대비(0/total이 안되기 때문에)하여 if문을 이용하여 gpa가 0인 경우와 아닌 경우를 나눠서 gpa/total의 값을 출력한다.

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

public class 너의_평점은 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        double gpa = 0;
        double total = 0;


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

            st.nextToken();
            double credit = Double.parseDouble(st.nextToken());
            String grade = st.nextToken();
            double score = 0;

            switch(grade) {
                case "A+": score = 4.5;
                break;
                case "A0": score = 4.0;
                break;
                case "B+": score = 3.5;
                    break;
                case "B0": score = 3.0;
                    break;
                case "C+": score = 2.5;
                    break;
                case "C0": score = 2.0;
                    break;
                case "D+": score = 1.5;
                    break;
                case "D0": score = 1.0;
                    break;
                case "F": score = 0.0;
                    break;
                case "P": continue;

            }

            gpa+= credit*score;
            total += credit;

        }

        if(gpa == 0){
            bw.write(String.format("%.6f",gpa));
        }else{
            bw.write(String.format("%.6f", gpa/total));
        }

        bw.flush();
        bw.close();
        br.close();

    }

}

알게된 점

해당 문제는 무조건적으로 20번만 반복하게 되므로, 시간복잡도는 O(20)이 나오게 된다.
gpa/total이 gpa가 0인 경우를 나눠 봤는데, NaN이 나왔다. Java에서 0을 나누게 되면, NaN이 나온다는 것을 처음 봤다.

문제푼 흔적

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글