# 문제
치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.
# 풀이
예제 입력이 어마무시해보이지만 쉬운 문제!
정답 소스코드를 보고 함께 풀어보자.
근데 치훈아 어떻게 졸업고사를 깜빡할 수가...
#include <iostream>
#include <map>
using namespace std;
int main(){
ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제
map<string, double> gradeTable;
gradeTable["A+"] = 4.5;
gradeTable["A0"] = 4.0;
gradeTable["B+"] = 3.5;
gradeTable["B0"] = 3.0;
gradeTable["C+"] = 2.5;
gradeTable["C0"] = 2.0;
gradeTable["D+"] = 1.5;
gradeTable["D0"] = 1.0;
gradeTable["F"] = 0.0;
string subject;
double sum = 0;
double credit;
double creditSum = 0;
string grade;
for(int i=0; i<20; i++){
cin >> subject >> credit >> grade;
if(grade != "P"){
creditSum += credit;
sum += credit * gradeTable[grade];
}
}
cout << sum/creditSum;
return 0;
}
이번 문제는 #include <map>을 통해 풀이했다.
굳이 이 방법을 쓰지 않더라도 동일하게 입력을 받아 switch문이나 if문으로 처리해줘도 괜찮을 것 같다.
map<string, double> gradeTable;
gradeTable["A+"] = 4.5;
gradeTable["A0"] = 4.0;
gradeTable["B+"] = 3.5;
gradeTable["B0"] = 3.0;
gradeTable["C+"] = 2.5;
gradeTable["C0"] = 2.0;
gradeTable["D+"] = 1.5;
gradeTable["D0"] = 1.0;
gradeTable["F"] = 0.0;
우선 등급에 따른 과목 평점을 맵핑해준다. (이 부분을 반복문 내에서 switch문이나 if문 처리로 바꿔줄 수 있을듯)
for(int i=0; i<20; i++){
cin >> subject >> credit >> grade;
if(grade != "P"){
creditSum += credit;
sum += credit * gradeTable[grade];
}
}
cout << sum/creditSum;
입력을 보면 총 20줄에 걸쳐 정보가 입력되지만 같은 줄에서도 과목명, 학점, 등급을 공백으로 구분하고 있다.
따라서 getline을 사용하기보단, 평소 하던대로 cin을 사용해 각각 해당하는 변수에 밀어넣어주는 식으로 코드를 구성했다.
등급이 P인 과목은 계산에서 제외하라고 했으므로 P가 아닌 과목들만 필요한 계산을 해준다. 학점의 총합도 구하고, 맵핑정보를 활용해 등급에 따른 학점을 받아와 (학점*과목평점) 값을 계산하기!
그 후엔 바로 (학점*과목평점) / 학점의 총합을 출력해주면 끝이다.
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 2563번: 색종이 | C++ 풀이 (2) | 2023.05.28 |
---|---|
[백준] 10798번: 세로 읽기 | C++ 풀이 (0) | 2023.05.27 |
[백준] 1316번: 그룹 단어 체커 | C++ 풀이 (0) | 2023.05.25 |
[백준] 2941번: 크로아티아 알파벳 | C++ 풀이 (0) | 2023.05.24 |
[백준] 4344번: 평균은 넘겠지 | C++ 풀이 (0) | 2023.05.23 |