본문 바로가기
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;
        }
    }

     

    댓글