Problem
https://www.acmicpc.net/problem/25206
전공평점을 계산해주는 프로그램을 작성해보자. 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다. P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
Solution
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;
int main(){
string score;
double sum = 0;
double totalScore = 0;
for(int i=0;i<20;i++){
getline(cin, score);
istringstream ss(score); // 문자열을 스트림화
vector<string> results;
string word;
while(getline(ss, word, ' ')){
// 공백을 기준으로 나눔
results.push_back(word);
}
double score = stod(results[1]);
totalScore += score;
string grade = results[2];
if(grade == "P"){
totalScore -= score;
continue;
} else if (grade == "A+") {
sum += (score * 4.5);
} else if (grade == "A0") {
sum += (score * 4.0);
} else if (grade == "B+") {
sum += (score * 3.5);
} else if (grade == "B0") {
sum += (score * 3.0);
} else if (grade == "C+") {
sum += (score * 2.5);
} else if (grade == "C0") {
sum += (score * 2.0);
} else if (grade == "D+") {
sum += (score * 1.5);
} else if (grade == "D0") {
sum += (score * 1.0);
} else if (grade == "F") {
sum += (score * 0.0);
}
}
cout << fixed;
cout.precision(6);
cout << sum / totalScore;
return 0;
}
- 한 줄씩 입력받기 위해 getline() 함수 사용
- 공백을 기준으로 나누기 위해서 스트림화해야 한다. (헤더 파일 sstream 추가)
- 문자열을 담을 벡터를 선언하여 공백을 기준으로 분리된 '과목명', '학점', '성적'을 차례로 넣어준다.
- string을 double 숫자로 바꿔주는 stod() 함수를 사용하여 학점 계산
Reference
https://wooono.tistory.com/462
'코딩 테스트 > 백준 (C++, Python)' 카테고리의 다른 글
cpp) 백준 1003: 피보나치 함수 (1) | 2023.06.10 |
---|---|
cpp) 백준 1541: 잃어버린 괄호 (0) | 2023.06.09 |
cpp) 백준 1260: DFS와 BFS (0) | 2023.06.09 |
BFS, DFS 이해하기 (0) | 2023.06.08 |
cpp) 백준 1931: 회의실 배정 (0) | 2023.06.08 |