BaekJoon

백준 알고리즘 2754 : 학점계산

코샵 2023. 9. 26. 15:40
반응형

 

1차 실패

A~F까지 기준을 잡고 첫 글자에 점수를 매기고 두번째 글자에 따라 추가로 연산해주면 될거 같아서 이렇게 코드를 작성했다.

출력이 잘되는걸 보고 제출을 하였지만 틀렸다고 한다. 

문제를 다시 읽어보니 예외처리가 안되어있다는 사실을 깨달았다.

더보기
namespace BaekJoon
{
	public class _2754
	{
		public static void Main()
		{
			string input = Console.ReadLine();

			Console.WriteLine(GetScore(input));

		}

		public static float GetScore(string grade)
		{
			var score= 0.0f;

			switch(grade[0])
			{
				case 'A': score = 4.0f; break;
				case 'B': score = 3.0f; break;
				case 'C': score = 2.0f; break;
				case 'D': score = 1.0f; break;
				case 'F': return 0.0f;
			}

			switch(grade[1])
			{
				case '+': score += 0.3f; break;
				case '-': score -= 0.3f; break;
			}

			return score;
		}
	}
}

 

2차시도 실패

코드를 다시 보니 좋은 방법이 생각이 났다. 

성적은 A~F만 주어지고 예외처리까지 해야하니 성적에 해당하는 배열을 만들어주고

static char[] grade = { 'A', 'B', 'C', 'D', 'F' };

 

해당하지 않으면 예외처리를 한다음 계산해주면 되겠더라

Array.IndexOf 함수를 이용해 인덱스를 찾아준다음 -4를 뺀 절대값이 기준값이 되는 공식을 찾았다. 

		public static float GetScore(string input)
		{
			int index = Array.IndexOf(grade, input[0]);

			if (index == -1) return float.NaN;

			var score = MathF.Abs(index - 4);

			if (input.Count() < 2) return score;

			switch(input[1])
			{
				case '+': score += 0.3f; break;
				case '-': score -= 0.3f; break;
			}

			return score;
		}

 

3차 성공

출력 형식이 문제였더라... 

namespace BaekJoon
{
	public class _2754
	{
		static char[] grade = { 'A', 'B', 'C', 'D', 'F' };

		public static void Main()
		{
			string input = Console.ReadLine();

			float score = GetScore(input);

			if (!float.IsNaN(score))
				Console.WriteLine(score.ToString("F1"));
		}

		public static float GetScore(string input)
		{
			int index = Array.IndexOf(grade, input[0]);

			if (index == -1) return float.NaN;

			var score = MathF.Abs(index - 4);

			if (input.Count() < 2) return score;

			switch(input[1])
			{
				case '+': score += 0.3f; break;
				case '-': score -= 0.3f; break;
			}

			return score;
		}
	}
}