Study/Baekjoon

[백준/C++] 25206 너의 평점은

에린_1 2024. 2. 17. 17:26
728x90

25206 너의 평점은

#include <bits/stdc++.h>
using namespace std;

constexpr unsigned int Hash(const char* str) 
{
	return str[0] ? static_cast<unsigned int>(str[0]) + 0xEDB8832Full * Hash(str + 1) : 8603;
}

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	char grade[50];
	string subject;
	float my_grade,sum_grade=0,major_GPA=0;
	for (int i = 0; i < 20; ++i)
	{
		cin >> subject >> my_grade >> grade;
		switch (Hash(grade))
		{
		case Hash("A+"):
			sum_grade += my_grade;
			major_GPA += my_grade * 4.5;
			break;
		case Hash("A0"):
			sum_grade += my_grade;
			major_GPA += my_grade * 4.0;
			break;
		case Hash("B+"):
			sum_grade += my_grade;
			major_GPA += my_grade * 3.5;
			break;
		case Hash("B0"):
			sum_grade += my_grade;
			major_GPA += my_grade * 3.0;
			break;
		case Hash("C+"):
			sum_grade += my_grade;
			major_GPA += my_grade * 2.5;
			break;
		case Hash("C0"):
			sum_grade += my_grade;
			major_GPA += my_grade * 2.0;
			break;
		case Hash("D+"):
			sum_grade += my_grade;
			major_GPA += my_grade * 1.5;
			break;
		case Hash("D0"):
			sum_grade += my_grade;
			major_GPA += my_grade * 1.0;
			break;
		case Hash("F"):
			sum_grade += my_grade;
			major_GPA += my_grade * 0.0;
			break;
		case Hash("P"):
			break;
		default:
			break;
		}
	}
	
	cout << major_GPA/sum_grade;
	return 0;
}
  • switch 함수와 hash, constexpr 키워드를 사용해서 풀었다.
  • TheJungle에게 코드리뷰를 부탁했는데 조금 더 짧게 푸는 코드를 소개시켜줬다.
int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	char grade[50];
	string subject;
	float my_grade,sum_grade=0,major_GPA=0;
	string grades[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F" };
	float number[9] = { 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0};
	
	for (int i = 0; i < 20; i++) 
	{
		cin >> subject >> my_grade >> grade;
		for (int idx = 0; idx < 9; idx++) 
		{
			if ("P" == grade)
				continue;
			if (grades[idx] == grade) 
			{
				sum_grade += my_grade;
				major_GPA += my_grade * number[idx];
				continue;
			} 
		}
	}
	cout << major_GPA/sum_grade;
	return 0;
}
  • 리스트를 활용해서 하는게 되게 신기했고, 코드도 많이 짧아질 수 있었다.
  • 하지만 들어가는것이 많거나 그러면 2중 for문의 문제가 생길 수도 있지 않을까 생각을 해 보았다.
728x90

'Study > Baekjoon' 카테고리의 다른 글

[백준/C++] 2566 최댓값  (0) 2024.02.19
[백준/C++] 10156 과자  (0) 2024.02.18
[백준/C++] 1436 영화감독 숌  (0) 2024.02.17
[백준/C++] 10988 팰린드롬인지 확인하기  (1) 2024.02.16
[백준/C++] 2444 별 찍기 - 7  (0) 2024.02.16