[Java] 백준 25206번: 너의 평점은

U·2023년 3월 1일

백준

목록 보기
16/112

💻 문제


일단 이해하자🤔

  • 간단한 문제라고 생각했다. for문을 이용해서 20줄을 입력 받아 과목명 학점 과목평점StringTokenizer를 이용해서 구한 뒤 계산하면 되기 때문이다.
    등급이 P인 과목은 계산에서 제외해야 함을 분명히 생각하고 문제를 풀었다. 그러나..
  • 학점의 총합에 등급이 P인 과목의 학점도 포함돼서 답이 계속 다르게 나왔다. 뒤늦게 오류를 발견하고 고쳤더니 맞았다😅

👀 풀이

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));

        String str[] = new String[20];
        double totalSum = 0;
        double scoreSum = 0;
        String gradeList[] = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F", "P"};
        double gradeScore[] = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0, 0.0};

        for (int i = 0; i < 20; i++) {
            str[i] = bfr.readLine();
            StringTokenizer st = new StringTokenizer(str[i], " ");
            String subject = st.nextToken();
            double score = Double.parseDouble(st.nextToken());
            String grade = st.nextToken();

            for (int j = 0; j < 10; j++) {
                if (grade.equals(gradeList[j])) {
                    totalSum += score * gradeScore[j];
                    if (j != 9) {
                        scoreSum += score;
                    }
                }
            }
        }

        double average = totalSum / scoreSum;
        System.out.printf("%.6f\n", average);

        bfr.close();
    }
}

아쉬웠던 점••

  • 처음에는 switch-case문을 썼다가 코드가 쓸데없이 길어지고 초보자 같아 배열을 이용한 방법으로 바꿨다. 앞으로 로직을 생각할때 1차원적으로 생각하기 보다 조금만 더 생각해서 더 깔끔하고 보기 쉬운 코드를 짜자.
  • 또한 등급이 P인 과목 때문에 하나하나 계산해가면서 디버깅을 했는데 이런 오류가 있었을 줄은 몰랐다. 언제쯤 이런 가벼운 문제는 쉽게 넘어갈련지🙄
profile
백엔드 개발자 연습생

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

감사합니다 큰 도움되었습니다

답글 달기