본문 바로가기
Development/Baekjoon

[C#] 25206번: 너의 평점은

by Mobics 2025. 8. 27.

목차


    백준 단계별로 풀어보기

    25.08.27

    6단계: 심화 1


    25206번: 너의 평점은

    문제 링크 : https://www.acmicpc.net/problem/25206

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - 백준에서 자주 보이는 절대오차 / 상대오차의 개념

    1. 절대오차

    : 절대오차가 x 이하면 정답 처리한다는 말은 실제 정답이 a라고 하고 내가 출력한 정답이 b라고 할 때, abs(b - a)의 값이 x이면 정답이라는 의미

    ex) 절대오차 10^(-2) / 실제 정답 : 66.666667 / 내가 출력한 정답 : 66.6 --> 실제 답과의 절대오차는 0.066667 이 되기 때문에 절대오차가 '6 * 10^(-2)' 이상 차이나므로 틀린 것

    2. 상대오차

    : 절대오차를 실제 정답으로 나눈 값으로, 100을 곱해 백분율로 바꾸면 상대오차가 된다.

    ex) 상대오차 10^(-1)까지 허용한다는 것은 10^(-1)에 100을 곱한 10%의 오차까지 허용한다는 말이다. 즉, 상대오차 10^(-2)는 1%의 오차까지 허용한다는 의미다.

     

    ※ float은 소수점 유효자리가 6자리까지, double은 소수점 유효자리가 15자리까지 표현된다. 따라서 10^(-2) 정도의 오차는 float으로 표현해도 상관없다.

     

    ※ 참고한 블로그

     

    [PS][백준/1008] 절대오차와 상대오차

    문제 1008번: A/B두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.www.acmicpc.net 절대오차와 상대오차이 문제에서 "실제 정답과 출력값의 절대오차 또는 상대오차가 10⁻⁹ 이

    all-i-want.tistory.com

     

    >> 풀이

    1. 문제에서 입력이 20줄에 걸쳐 과목명, 학점, 등급이 공백으로 구분되어 주어진다고 했으니, 반복문을 통해 20번 반복하여 문자열을 받고 공백을 기준으로 나눈다.
    2. 과목명은 필요없으니, 학점과 등급을 변수로 담는다. 이때, 등급이 P인 과목은 계산에서 제외되기 때문에 등급이 P일 때는 continue로 넘긴다.
    3. 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이므로, (학점 × 과목평점)을 담을 변수인 'sum', 학점의 총합을 담을 변수인 'totalCredits'를 선언하고 반복문에서 totalCredits에 학점을 더해준다.
    4. 과목평점은 string으로 정해져있으므로, switch문을 사용하여 해당하는 과목평점에 학점을 곱해서 sum에 더해준다.
    5. (학점 × 과목평점) / 학점의 총합을 출력하되, 절대 또는 상대오차가 10^(-4) 이하여야 하기 때문에 ToString을 사용하여 소수점 여섯째 자리까지 표기해준다.

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            float totalCredits = 0;
            float sum = 0;
    
            for (int i = 0; i < 20; i++)
            {
                string[] input = Console.ReadLine().Split();
                float credit = float.Parse(input[1]);
                string grade = input[2];
    
                if (grade == "P") continue;
    
                totalCredits += credit;
    
                switch (grade)
                {
                    case "A+":
                        sum += credit * 4.5f;
                        break;
                    case "A0":
                        sum += credit * 4.0f;
                        break;
                    case "B+":
                        sum += credit * 3.5f;
                        break;
                    case "B0":
                        sum += credit * 3.0f;
                        break;
                    case "C+":
                        sum += credit * 2.5f;
                        break;
                    case "C0":
                        sum += credit * 2.0f;
                        break;
                    case "D+":
                        sum += credit * 1.5f;
                        break;
                    case "D0":
                        sum += credit * 1.0f;
                        break;
                    case "F":
                        break;
                    default:
                        break;
                }
            }
            Console.Write((sum / totalCredits).ToString("F6"));
        }
    }

    'Development > Baekjoon' 카테고리의 다른 글

    [C#] 2566번: 최댓값  (4) 2025.08.29
    [C#] 2783번: 행렬 덧셈  (1) 2025.08.28
    [C#] 1316번: 그룹 단어 체커  (0) 2025.08.25
    [C#] 2941번: 크로아티아 알파벳  (0) 2025.08.21
    [C#] 1157번: 단어 공부  (0) 2025.08.20