반응형
풀이
A~F 학점까지만 계산하기 위해 입력받은 글자중에 해당하는 부분이 있는지 확인하기 위해 string 배열을 만들어준다.
이제와서 생각해보니 P만 검사해서 제외하는게 더 좋았을걸...
static string[] grades = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F" };
20줄에 걸쳐 과목명, 학점, 등급이 공백으로 구분되어 주어져 20줄에 해당하는 글자를 입력받기 위해 배열을 생성하고
20번 동안 입력을 받는다.
public static void Main()
{
string[] input = new string[20];
int i = 0;
do
{
input[i] = Console.ReadLine();
i++;
}
while (i < 20);
Console.WriteLine(GetAverage(input));
}
입력으로 받은 string 배열을 통해 전공평점을 계산하는 함수
순회를 돌며 공백을 기준으로 나누고 계산해야 할 등급이 포함되어 있는지 체크하고 전공과목의 합(학점 x 과목평점)과 학점의 합을 계산한 후 전공평점을 반환한다
word[1] 부분은 맘에 들지 않는다
public static float GetAverage(string[] txt)
{
foreach (string line in txt)
{
string[] word = line.Split(' ');
if(grades.Contains(word.Last()))
{
float subjectGrade = GetScore(word.Last());
float score = float.Parse(word[1]);
totalSum += subjectGrade * score;
sum += score;
}
}
return totalSum/ sum;
}
주어진 글자의 과목평점을 반환하는 함수
public static float GetScore(string grade)
{
var score = 0f;
switch (grade)
{
case "A+": score = 4.5f; break;
case "A0": score = 4.0f; break;
case "B+": score = 3.5f; break;
case "B0": score = 3.0f; break;
case "C+": score = 2.5f; break;
case "C0": score = 2.0f; break;
case "D+": score = 1.5f; break;
case "D0": score = 1.0f; break;
case "F": score = 0f; break;
}
return score;
}
전체코드
더보기
namespace BaekJoon;
public class YourGrade
{
static string[] grades = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F" };
static float sum, totalSum;
public static void Main()
{
string[] input = new string[20];
int i = 0;
do
{
input[i] = Console.ReadLine();
i++;
}
while (i < 20);
Console.WriteLine(GetAverage(input));
}
public static float GetAverage(string[] txt)
{
foreach (string line in txt)
{
string[] word = line.Split(' ');
if(grades.Contains(word.Last()))
{
float subjectGrade = GetScore(word.Last());
float score = float.Parse(word[1]);
totalSum += subjectGrade * score;
sum += score;
}
}
return totalSum/ sum;
}
public static float GetScore(string grade)
{
var score = 0f;
switch (grade)
{
case "A+": score = 4.5f; break;
case "A0": score = 4.0f; break;
case "B+": score = 3.5f; break;
case "B0": score = 3.0f; break;
case "C+": score = 2.5f; break;
case "C0": score = 2.0f; break;
case "D+": score = 1.5f; break;
case "D0": score = 1.0f; break;
case "F": score = 0f; break;
}
return score;
}
}
'BaekJoon' 카테고리의 다른 글
JavaFestival23번 문제 C#으로 풀어보기 (0) | 2024.04.24 |
---|---|
백준 알고리즘 10875 : 뱀 (시간초과) (2) | 2023.10.13 |
백준 알고리즘 2754 : 학점계산 (0) | 2023.09.26 |
백준 알고리즘 1264번 : 모음의 개수 (0) | 2023.09.15 |
백준 알고리즘 1330번 : 두 수 비교하기 (0) | 2023.09.11 |