


이번 문제는 입력받은 데이터를 바탕으로 전공 평점을 구하는 문제이다.
입력값 중 과목명은 계산에 사용되지 않는 데이터이므로 제외하고, 학점과 등급을 중심으로 처리했다.
등급은 문제에서 표로 제공되기 때문에 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);

추가로, 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);'코딩 테스트 > 백준' 카테고리의 다른 글
| 백준 - [단계별로 풀어보기 2차원 배열] 2566 최댓값 (0) | 2026.03.19 |
|---|---|
| 백준 - [단계별로 풀어보기 2차원 배열] 2738 행렬 덧셈 (0) | 2026.03.18 |
| 백준 - [단계별로 풀어보기 심화 1] 1316 단어 체커 (0) | 2026.03.18 |
| 백준 - [단계별로 풀어보기 심화 1] 2941 크로아티아 알파벳 (0) | 2026.03.17 |
| 백준 - [단계별로 풀어보기 심화 1] 1157 단어 공부 (0) | 2026.03.16 |