[c/c++] 백준 25206(Silver 5)

은동·2023년 3월 10일
0

Baekjoon

목록 보기
39/49

🔨 문제

https://www.acmicpc.net/problem/25206
치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.

전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.

P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.

20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.


🔨 해결방법

  1. 공백을 포함하여 입력받아야 하므로 getline()을 사용하였다.

  2. 입력받은 문자열을 공백을 기준으로 분리해야 하므로 istringstream을 사용하고 이를 벡터에 push_back했다.

  3. 소수점 아래 6자리를 출력해야 하므로 cout.precision()을 사용했고 이 소수점을 고정시키기 위해 cout << fixed를 사용하였다.


🔨 코드

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int main() {

    string subjectScore;
    double sum = 0;
    double totalScore = 0;
    
    for (int i = 0; i < 20; i++) {
        getline(cin, subjectScore); //공백을 포함하여 입력을 받으므로 getline()함수 사용
        istringstream ss(subjectScore);  // 문자열을 스트림화

        vector<string> results; //  공백 분리 결과를 저장할 배열
        
        string word;
        while (getline(ss, word, ' ')) {	// 공백을 기준으로 
            results.push_back(word);
        }
        double score = stod(results[1]);	// 학점을 저장할 변수
        totalScore += score;	// 학점의 총합으로 나누기 위해 학점 더하는 변수
        string scoreEvaluation = results[2];	// 학점평균을 저장할 변수

        if (scoreEvaluation == "P") {
            totalScore -= score;    // 학점평균이 P가 나오면 계산에서 제외해야하므로
            continue;
        }
        else if (scoreEvaluation == "A+") {
            sum += (score * 4.5);
        }
        else if (scoreEvaluation == "A0") {
            sum += (score * 4.0);
        }
        else if (scoreEvaluation == "B+") {
            sum += (score * 3.5);
        }
        else if (scoreEvaluation == "B0") {
            sum += (score * 3.0);
        }
        else if (scoreEvaluation == "C+") {
            sum += (score * 2.5);
        }
        else if (scoreEvaluation == "C0") {
            sum += (score * 2.0);
        }
        else if (scoreEvaluation == "D+") {
            sum += (score * 1.5);
        }
        else if (scoreEvaluation == "D0") {
            sum += (score * 1.0);
        }
        else if (scoreEvaluation == "F") {
            sum += (score * 0.0);
        }
        
    }
    cout << fixed;  // 소수점 자리 고정
    cout.precision(6);  // 소수점 아래 6자리 출력
    cout << sum / totalScore;
    
    return 0;

}
profile
자자 선수입장~

0개의 댓글