코딩 테스트/백준

백준 - [단계별로 풀어보기 심화 1] 25206 너의 평점은

devrabbit22 2026. 3. 18. 03:06

이번 문제는 입력받은 데이터를 바탕으로 전공 평점을 구하는 문제이다.

입력값 중 과목명은 계산에 사용되지 않는 데이터이므로 제외하고, 학점과 등급을 중심으로 처리했다.

등급은 문제에서 표로 제공되기 때문에 switch문을 활용해 각 등급을 점수로 환산하도록 구현했다.

한 가지 주의해야 할 점은 P 등급이다. P는 0점으로 처리되는 것이 아니라 평점 계산 자체에서 제외되는 값이기 때문에, 연산에 포함될 경우 전체 결과가 잘못될 수 있다.

따라서 continue를 사용해 P 등급인 경우 이후의 평점 계산을 수행하지 않고 해당 반복을 건너뛰도록 처리했다.

 //백준 25206 너의 평점은
 double totalScore = 0; // (학점 × 평점) 합
 double totalGrade = 0; // 학점 합

 for (int i = 0; i < 20; i++)
 {
     string[] inputData = Console.ReadLine().Split();

     double grade = double.Parse(inputData[1]);
     string rank = inputData[2];

     double score = 0;

     switch (rank)
     {
         case "A+":
             score = 4.5; break;
         case "A0":
             score = 4.0; break;
         case "B+":
             score = 3.5; break;
         case "B0":
             score = 3.0; break;
         case "C+":
             score = 2.5; break;
         case "C0":
             score = 2.0; break;
         case "D+":
             score = 1.5; break;
         case "D0":
             score = 1.0; break;
         case "F":
             score = 0.0; break;
         case "P":
             continue; //P는 평점 계산에서 제외 totalScore += grade * score; totalGrade += grade; 연산 무시
     }

     totalScore += grade * score;
     totalGrade += grade;
 }

 Console.WriteLine(totalScore / totalGrade);

출력 결과 1

추가로, switch문 역시 결국 내부적으로는 특정 값에 따라 분기하는 구조라는 점에서, 이를 Dictionary를 활용한 데이터 매핑 방식으로도 해결할 수 있지 않을까라는 생각이 들었다.

여러 자료를 찾아보며 Dictionary를 이용해 등급과 점수를 매핑하는 방식으로 구현해 보았다.

그 결과 코드의 길이가 더 짧아졌고, 등급과 점수에 대한 관계를 한눈에 파악할 수 있어 가독성과 확장성 측면에서 더 효율적이라는 느낌을 받았다.

double totalScore = 0;
double totalGrade = 0;

Dictionary<string, double> gradeDictionary = new Dictionary<string, double>()
{
    {"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}
};

for (int i = 0; i < 20; i++)
{
    string[] inputData = Console.ReadLine().Split();

    double grade = double.Parse(inputData[1]);
    string rank = inputData[2];

    if (rank == "P")
        continue;	//P는 연산에서 제외

    totalScore += grade * gradeDictionary[rank];
    totalGrade += grade;
}

Console.WriteLine(totalScore / totalGrade);