본문 바로가기

Algorithm/백준

백준 25206 너의 평점은

문제

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!

치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.

전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.

인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.

A+ 4.5
A0 4.0
B+ 3.5
B0 3.0
C+ 2.5
C0 2.0
D+ 1.5
D0 1.0
F 0.0

P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.

과연 치훈이는 무사히 졸업할 수 있을까?

입력

20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.

출력

치훈이의 전공평점을 출력한다.

정답과의 절대오차 또는 상대오차가 10−4 이하이면 정답으로 인정한다.

제한

  • 1 ≤ 과목명의 길이 ≤ 50
  • 과목명은 알파벳 대소문자 또는 숫자로만 이루어져 있으며, 띄어쓰기 없이 주어진다. 입력으로 주어지는 모든 과목명은 서로 다르다.
  • 학점은 1.0,2.0,3.0,4.0중 하나이다.
  • 등급은 A+,A0,B+,B0,C+,C0,D+,D0,F,P중 하나이다.
  • 적어도 한 과목은 등급이 P가 아님이 보장된다.
package ch.ch.bong.baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Algorithm25206 {
    public static void main(String[] args) throws IOException {

        System.out.println(chkScore());
    }

    public static String chkScore() throws IOException {
        Double sumScore = 0.0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<String, Double> scoreMap = new HashMap<>();
        Double score = 0.0;
        scoreMap.put("A+", 4.5);
        scoreMap.put("A0", 4.0);
        scoreMap.put("B+", 3.5);
        scoreMap.put("B0", 3.0);
        scoreMap.put("C+", 2.5);
        scoreMap.put("C0", 2.0);
        scoreMap.put("D+", 1.5);
        scoreMap.put("D0", 1.0);
        scoreMap.put("F", 0.0);
        for(int i = 0 ; i < 20; i ++){
            String[] str = br.readLine().split(" ");

            if(!str[2].equals("P")) {
                score += Double.parseDouble(str[1]) * scoreMap.get(str[2]);
                sumScore += Double.parseDouble(str[1]);
            }
        }
        return String.format("%.6f",score / sumScore);

    }
}

 

 

문제풀이

Map에 일일히 학점에 대한 점수를 키 벨류형태로 넣어주었다.

이렇게 한 이유는 키값을 넣었을때 원하는 벨류값을 편하게 받고 싶어서 맵으로 했으나, 길이가 길어졌다..

 

그 뒤에 score는 학점*과목평점 이므로 바로 곱하여서 score에 합을 바로 저장하였고

sumScore는 과목들의 총합을 바로 구하였다.

 

하여 리턴하였으나, String.format("%.6f", score/sumScore); 이 부분에서 

답을 다 구하였는데 왜 스트링으로 리턴하지 ? 라고 생각할수도 있을 것 같다.

그 이유는 자릿수 때문이다. 

소수점 6자리까지 나타내는 값을 포멧을 이용하여 변환 시켜주는 매서드를 통하여 

원하는 결과값을 출력할 수 있었다.

 

문제 출처 - https://www.acmicpc.net/problem/25206

'Algorithm > 백준' 카테고리의 다른 글

백준 1158 요세푸스 문제  (0) 2024.07.25
백준 1018 체스판 다시 칠하기  (0) 2024.06.28
백준 2675 문자열 반복  (2) 2022.11.23
백준 11050 이항 계수 1  (1) 2022.08.29
백준 18258 큐2  (0) 2022.08.28