문제설명
입출력 예제
개념
학점의 평균을 계산하는 문제다. 학점을 계산하는 방법은 다음과 같다.
- 전공 학점: 학점 * 과목 평점
- 전공 학점 평균: 전공 학점 / 총 학점
- 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 |