BaekJoon

백준 알고리즘 25206번 : 너의 평점은

코샵 2023. 9. 26. 13:54
반응형

 

풀이

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;
	}
}