반응형
문제
- 전공 학점: 학점 * 과목 평점
- 전공 학점 평균: 전공 학점 / 총 학점
- P 과목은 제외
따라서 전공 학점들을 계산하여 모두 더한 후 총 학점으로 나눠주면 문제를 해결하면 된다.
정답코드
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
float count = 0;
float sum = 0;
string grade[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F" };
for(int i =0; i<20; i++)
{
float y;
string x, z;
cin >> x >> y >> z;
if (z == "P")
{
continue;
}
count += y;
if (z == "F")
{
continue;
}
float num = 5.0;
for (int i = 0; i < 9; i++)
{
num -= 0.5;
if (z == grade[i] && i != 8)
{
sum += y * num;
break;
}
}
}
cout << sum / count << endl;
return 0;
}
코드 설명
float count = 0;
float sum = 0;
string grade[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F" };
변수를 초기화해줍니다. grade는 저렇게 P를 제외하고 STRING으로 묶어주었습니다.
총 20과목이니 20번 입력을 처리하였으며 x(과목명), y(학점), z(성적)으로 해주었습니다. 저는 임의대로 이렇게 하였으나 보기 편한대로 변수는 바꾸면 됩니다.
if (z == "P")
{
continue;
}
P는 성적에 들어가지 않으므로 다음 반복으로 넘어가도록 continue를 해주었습니다.
count += y;
if (z == "F")
{
continue;
}
F는 0.0이지만 학점에는 유효한 성적이니 학점을 count += 해준 후 점수는 더하지 않습니다.
float num = 5.0;
for (int i = 0; i < 9; i++)
{
num -= 0.5;
if (z == grade[i] && i != 8)
{
sum += y * num;
break;
}
}
성적을 합산해줍니다.
P와 F값은 제외되었으니 처음 num을 5.0으로 둔 후 num을 0.5씩 빼주면서 진행을 해줍니다. 소수점이 존재하므로 int가 아닌 float로 해주어야 하며 다 계산이 되면 break문을 통해 넘어가도록 되어 있습니다.
cout << sum / count << endl;
이후 합산된 점수를 학점의 총합으로 나누어 평균을 계산하고 출력하면 값이 나옵니다.
저는 처음에 string된 문장을 sstring을 사용하여 쪼개려고 했는데 그럴 필요 없이 cin을 각각 받으면 되기 때문에 문제없이 사용이 되었습니다.
반응형
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[C++] 백준 10798 세로읽기 (0) | 2024.05.22 |
---|---|
[c++] 백준 2738번 : 행렬 덧셈 (0) | 2024.05.21 |
[c++]백준 1076번 저항 (0) | 2024.05.19 |
[C++] 백준 1094번 : 막대기 (0) | 2024.05.19 |
C++ 백준 1075 나누기 (0) | 2024.05.14 |