Algorithm/BOJ

[BOJ] 25206 너의 평점은

SolB 2023. 9. 30. 17:30

25206 너의 평점은

 

코드

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));
        String str[] = new String[20];
        double total = 0;
        double credits = 0;

        for(int i = 0; i < 20; i++){
            str[i] = br.readLine();
            StringTokenizer st = new StringTokenizer(str[i], " ");
            st.nextToken();
            double credit = Double.parseDouble(st.nextToken());
            String grade = st.nextToken();
            total += credit * calculateRating(grade);
            if(!grade.equals("P")) credits += credit;
        }
        double avg = total/credits;
        System.out.printf("%.6f\n", avg);

    }
    public static double calculateRating(String grade) {
        if (grade.equals("A+")) return 4.5;
        if (grade.equals("A0")) return 4.0;
        if (grade.equals("B+")) return 3.5;
        if (grade.equals("B0")) return 3.0;
        if (grade.equals("C+")) return 2.5;
        if (grade.equals("C0")) return 2.0;
        if (grade.equals("D+")) return 1.5;
        if (grade.equals("D0")) return 1.0;
        else return 0.0;
    }
}

 

코드 설명

  1. 20줄을 입력받기 때문에, for문으로 20번 반복하여 str[i]를 입력받는다
  2. 입력받은 한 줄을 각 subject, credit, grade로 토큰화한다
  3. total에 credit과 calculateRating(grade)를 누적시킨다
    • calculateRating은 grade(ex. A+)를 점수(ex. 4.5)로 변환하기 위한 함수이다
  4. grade "P"일 경우, 총 학점 수에는 포함되지 않기 때문에 이를 제외하고 총 몇학점을 들었는지 credits에 누적시킨다
  5. 최종적으로 total을 credits로 나누어 평점을 구한다

 

실행 결과