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 |