Problem
https://www.acmicpc.net/problem/25206
25206번: 너의 평점은
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치
www.acmicpc.net
전공평점을 계산해주는 프로그램을 작성해보자. 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다. 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++] String 공백 분리
들어가기 앞서, 파이썬에서는 string을 공백 분리하기 위해 split 메소드를 사용할 수 있습니다. 하지만, C++은 STL에서 split 을 지원하지 않기 때문에, 다른 방법을 사용해야합니다. 다양한 방법들 중
wooono.tistory.com
'코딩 테스트 > 백준 (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 |