Algorithm/백준

[백준] 25206 with C++

nowkoes 2023. 4. 5. 22:05

문제설명


입출력 예제


개념

 학점의 평균을 계산하는 문제다. 학점을 계산하는 방법은 다음과 같다.

  • 전공 학점: 학점 * 과목 평점
  • 전공 학점 평균: 전공 학점 / 총 학점
  • P 과목은 제외

 따라서 전공 학점들을 계산하여 모두 더한 후 총 학점으로 나눠주면 문제를 해결할 수 있다.


풀이 (1)

#include <iostream>

int main()
{
	int count = 0;
	float sum = 0;
	float grades[9] = { 0 };
	std::string str[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"};

 신청한 총 학점을 계산할 count, 학점의 총합을 계산할 sum, A+부터 F까지 학점을 계산할 grades 변수를 선언한다.

 

	for (int i = 0; i < 20; i++)
	{
		float score;
		std::string grade, name;

		std::cin >> name >> score >> grade;

		if (grade == "P")
		{
			continue;
		}

		count += score;

		float num = 5.0;
		for (int i = 0; i < 9; i++)
		{
			num -= 0.5;
			if (grade == str[i])
			{
				grades[i] += num * score;
				break;
			}
		}
	}

 과목명, 학점, 등급을 입력받고, P과목은 계산에서 제외하므로 grade가 P인 경우 다음 반복으로 넘어간다. P가 아닌 경우엔 학점을 count에 더해주고, grade[] 배열에 A+부터 F까지 평점을 계산해 넣는다.

 

	grades[8] = 0;

	for (int i = 0; i < 8; i++)
		sum += grades[i];

	std::cout << sum / (count);
}

 F학점이 차지하는 grades[8]은 0으로 초기화하고, 평점의 총합을 계산한 후 신청한 학점으로 나눠준다.

 

총합본

#include <iostream>

int main()
{
	int count = 0;
	float sum = 0;
	float grades[9] = { 0 };
	std::string str[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"};

	for (int i = 0; i < 20; i++)
	{
		float score;
		std::string grade, name;

		std::cin >> name >> score >> grade;

		if (grade == "P")
		{
			continue;
		}

		count += score;

		float num = 5.0;
		for (int i = 0; i < 9; i++)
		{
			num -= 0.5;
			if (grade == str[i])
			{
				grades[i] += num * score;
				break;
			}
		}
	}

	grades[8] = 0;

	for (int i = 0; i < 8; i++)
		sum += grades[i];

	std::cout << sum / (count);
}

풀이 (2)

 map 자료구조를 이용하면 더욱 깔끔하게 풀 수 있을 거 같아 시도해보았다.

 

#include <iostream>
#include <map>

int main() 
{
	std::map<std::string, float> grades =
		{ {"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} };

	float totalScore = 0, totalGrade = 0;

	for (int i = 0; i < 20; i++)
	{
		std::string name, grade;
		float score;

		std::cin >> name >> score >> grade;

		if (grade == "P")
			continue;
		
		totalScore += score;
		totalGrade += score * grades[grade];
	}

	std::cout << totalGrade / totalScore << '\n';
}

 

반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준] 2751 with C++  (0) 2023.04.10
[백준] 1929 with C++  (0) 2023.04.06
[백준] 2563 with C++  (0) 2023.04.02
[백준] 2559 with C++  (0) 2023.02.27
[백준] 9375 with C++  (0) 2023.02.24