백준 이번학기 평점은 몇점?

KIMYEONGJUN·2024년 11월 17일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에,
백준이가 이번 학기에 들은 과목 수가 주어진다.
둘째 줄부터 N개의 줄에 각 과목의 과목명,
학점,
성적이 주어진다.
과목명은 알파벳 소문자와 숫자,
그리고 밑줄 (_)로만 이루어져 있으며,
최대 100글자이고,
학점은 1보다 크거나 같고,
3보다 작거나 같은 자연수이다.
성적은 문제에 설명한 13가지 중 하나이다.

첫째 줄에 평균 평점을 소수점 셋째 자리에서 반올림해서 둘째 자리까지 출력한다. (평균 평점이 1.5이면 1.50을 출력한다.)

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 입력받는다.
평점 매핑: 각 성적에 대해 평점을 배열로 정의해준다.
루프: 사용자가 입력한 과목 수만큼 반복하여 각 과목의 학점과 성적을 읽고,
해당 성적의 평점을 계산하여 총 평점을 누적한다.
평균 계산: 총 평점을 총 학점으로 나누어 평균 평점을 계산한다.
출력: printf를 사용하여 소수점 둘째 자리까지 출력한다.

코드로 구현

package baekjoon.baekjoon_24;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 2755번 문제
public class Main840 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine()); // 과목 수 입력
        double totalGradePoints = 0.0;
        int totalCredits = 0;

        // 성적에 따른 평점 매핑
        double[] gradePoints = {
                4.3, // A+
                4.0, // A0
                3.7, // A-
                3.3, // B+
                3.0, // B0
                2.7, // B-
                2.3, // C+
                2.0, // C0
                1.7, // C-
                1.3, // D+
                1.0, // D0
                0.7, // D-
                0.0  // F
        };

        for (int i = 0; i < n; i++) {
            String[] input = br.readLine().split(" ");
            int credits = Integer.parseInt(input[1]); // 학점
            String grade = input[2]; // 성적

            // 성적에 따른 인덱스 찾기
            int gradeIndex = getGradeIndex(grade);

            if (gradeIndex != -1) {
                totalGradePoints += credits * gradePoints[gradeIndex];
                totalCredits += credits;
            }
        }

        // 평균 평점 계산
        double average = totalCredits == 0 ? 0.0 : totalGradePoints / totalCredits;

        // 소수점 둘째 자리까지 반올림하여 출력
        System.out.printf("%.2f\n", average);
        br.close();
    }

    private static int getGradeIndex(String grade) {
        switch (grade) {
            case "A+": return 0;
            case "A0": return 1;
            case "A-": return 2;
            case "B+": return 3;
            case "B0": return 4;
            case "B-": return 5;
            case "C+": return 6;
            case "C0": return 7;
            case "C-": return 8;
            case "D+": return 9;
            case "D0": return 10;
            case "D-": return 11;
            case "F":  return 12;
            default:   return -1; // 잘못된 성적 처리
        }
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글