문제
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!
치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.
P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
과연 치훈이는 무사히 졸업할 수 있을까?
입력
20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.
출력
치훈이의 전공평점을 출력한다.
정답과의 절대오차 또는 상대오차가 10^-4이하이면 정답으로 인정한다.
풀기전 로직 생각
- 과목명, 학점, 등급을 각각 string double string형으로 지정해준다.
- 반복문으로 20번 반복하도록 한다.
- 3가지 변수에 cin으로 입력받아주고 등급을 함수를 통해 매개변수로 던져주고 그에 맞는 점수를 받아온다.
- 이때 등급이 P일경우 continue로 반복문을 1번 넘기게 하여 계산에 포함되지 않게 한다.
- 받아온 점수를 학점과 계산하고 과목평점의 합도 계산한다.
- 전공과목별 (학점 x 과목평점)의 합을 학점의 총합으로 나누어 출력시킨다.
코드
#include <iostream>
using namespace std;
double outGrade(string grd) {
double out=0.0;
if (grd == "A+")
out = 4.5;
else if (grd == "A0")
out = 4.0;
else if (grd == "B+")
out = 3.5;
else if (grd == "B0")
out = 3.0;
else if (grd == "C+")
out = 2.5;
else if (grd == "C0")
out = 2.0;
else if (grd == "D+")
out = 1.5;
else if (grd == "D0")
out = 1.0;
else if (grd == "F")
out = 0.0;
return out;
}
int main(void) {
char *arr = new char[20];
string className; //과목명
double grade;//학점
string GradeA; //과목평점
double SumHak = 0.0;
double SumGrade=0.0; //학점의 총합
int Pcount = 0; //P갯수
for (int i = 0; i < 20; i++) {
cin >> className >> grade >> GradeA;
if (GradeA == "P") {
Pcount++;
continue;
}
//(학점X과목평점)의 합/학점의 총합을 학점의 총합
SumHak += grade * outGrade(GradeA); //학점 x 과목평점
SumGrade += grade; //과목평점의 합 계산
}
SumHak /= SumGrade;
cout << SumHak;
return 0;
}
결과
이상입니다.
'백준' 카테고리의 다른 글
[백준] 11005번 - 진법 변환2 C++ (0) | 2024.05.07 |
---|---|
[백준] 2563번 - 색종이 C++ (0) | 2024.05.04 |
[백준] 1316번 - 그룹 단어 체커 <C++> (0) | 2024.04.21 |
[백준] 2941번 - 크로아티아 알파벳 (0) | 2024.04.20 |
[백준] 27866번 - 문자와 문자열 (0) | 2024.04.08 |