전공평점 = 학점x과목평점
(P는 계산에서 제외)
풀이1 (내풀이)
- cout<<fixed; cout<<setprecision(6); 으로 소수점 6자리까지 표시한다.
- cin.getline(s,n,d) : s는 char배열, n은 읽을 바이트 개수, d가 나오기 전까지만 받기
- split 함수 새로 정의
- vector pair 사용
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
using namespace std;
double rate[] = { 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0 };
double whichRate(double rate[], string se) {
if (se == "A+")
return rate[0];
else if (se == "A0")
return rate[1];
else if (se == "B+")
return rate[2];
else if (se == "B0")
return rate[3];
else if (se == "C+")
return rate[4];
else if (se == "C0")
return rate[5];
else if (se == "D+")
return rate[6];
else if (se == "D0")
return rate[7];
else if (se == "F")
return rate[8];
}
vector<string> split(string str, char delimiter);
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cout << fixed;
cout << setprecision(6); // 수정된 부분
vector<pair<string, string>> pairs;
double bottom = 0;
double top = 0;
for (int i = 0; i < 20; i++) {
char s[60];
cin.getline(s, 60, '\n');
vector<string> subject = split(s, ' ');
pairs.push_back(make_pair(subject[1], subject[2]));
}
for (int i = 0; i < 20; i++) {
if (pairs[i].second != "P") {
double n = stof(pairs[i].first);
double k = whichRate(rate, pairs[i].second);
bottom += n;
top += (n * k);
//cout << top<<endl;
}
}
double re = top / bottom;
cout << re;
return 0;
}
vector<string> split(string input, char delimiter) {
vector<string> answer;
stringstream ss(input);
string temp;
while (getline(ss, temp, delimiter)) {
answer.push_back(temp);
}
return answer;
}
풀이2 (다른 사람)
- cin >> a >> b >> c 로 '\n' 전까지 한 줄을 입력 받을 수 있다
- '+' 인 경우엔 +0.5를 해주는 코드를 추가한다
- 이 코드가 더 깔끔하다
#include <iostream>
using namespace std;
int main() {
string name, grade;
double credit;
double sumCredit = 0.0;
double temp;
double res = 0.0;
for(int i = 0; i < 20; i++) {
cin >> name >> credit >> grade;
if(grade == "P") continue;
sumCredit += credit;
if(grade == "F") continue;
if(grade[0] == 'A') temp = 4;
else if (grade[0] == 'B') temp = 3;
else if (grade[0] == 'C') temp = 2;
else temp = 1;
if (grade[1] == '+') temp += 0.5;
res += credit * temp;
}
cout << res / sumCredit;
return 0;
}
'전공 > 알고리즘(algorithm)' 카테고리의 다른 글
[C++] 자료구조 : 스택 정리 (0) | 2024.01.08 |
---|---|
[C++] 백준(BOJ) 10798 세로읽기 (0) | 2024.01.05 |
[C++] 백준(BOJ) 1316 그룹 단어 체커 (1) | 2024.01.04 |
[C++] 백준(BOJ) 2941 크로아티아 알파벳 (2) | 2024.01.04 |
[C++] 백준(BOJ) 1157 단어공부 (1) | 2024.01.04 |