본문 바로가기
PS/BOJ

[자바] 백준 25206 - 너의 평점은 (java)

by Nahwasa 2023. 4. 15.

문제 : boj25206

 

 

필요 알고리즘

  • 구현, 문자열
    • 문자열을 잘 파싱해서 문제에서 제시된대로 구현해주는 문제이다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 

 

풀이

  구현 로직은 다음과 같다.

 

1. 20줄 각각을 받으면서 첫 번째 문자는 필요없으니 버리고, 세 번째 입력값이 'P' 라면 다음 줄로 넘어간다.

 

2. 2번째 값을 double로 받은걸 grade, 3번째는 double로 과목평점을 변환해서 받은걸 rating 이라 하자.

 

3. grade 값의 합을 따로 계산한다(코드의 gradeSum). grade * rating의 합도 따로 계산한다(코드의 sum)

 

4. sum / gradeSum을 소수점 4자리 이상 출력한다.

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }

    private void solution() throws Exception {
        double gradeSum = 0;
        double sum = 0;
        int line = 20;

        while (line-->0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            st.nextToken();
            double grade = Double.parseDouble(st.nextToken());
            Double rating = getRating(st.nextToken());
            if (rating == null) continue;
            sum += grade * rating;
            gradeSum += grade;
        }

        System.out.printf("%.5f\n", sum / gradeSum);
    }

    private Double getRating(final String s) {
        switch (s) {
            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 null;
    }
}