본문 바로가기

백준/실버

[백준 25206번] 너의 평점은 (C++)

문제링크 : https://www.acmicpc.net/problem/25206

 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

map<string, float>m; //map으로 미리 등급에 따른 점수를 저장

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);
    
    m["A+"] = 4.5; m["A0"] = 4.0;
    m["B+"] = 3.5; m["B0"] = 3.0;
    m["C+"] = 2.5; m["C0"] = 2.0;
    m["D+"] = 1.5; m["D0"] = 1.0;
    m["F"] = 0.0;

    float score_sum = 0;
    float sum = 0;
    string s; float score; string grade;

    for(int i=0; i<20; i++)
    {
        cin >> s >> score >> grade;
        if(grade=="P") continue; //P인 경우 계산에서 제외
        sum += score * m[grade]; //전공 평점 합
        score_sum += score; //학점 합
    }
    cout << fixed << setprecision(6); //소수점 여섯자리까지 출력
    cout << sum/score_sum;

    return 0;
}

map으로 미리 등급에 따른 점수를 저장해놓고 시작했다.

이후 전공 평점 합과 학점을 따로 더하여 나눠서 출력하면 된다.

 

여기서 주의해야 할 것인 P인 경우는 계산에서 아에 제외시키는 것이다.

추가로 예제 출력이 소수점 여섯자리까지여서 여섯자리까리 출력이 되도록 해주었다.

 

map 말고 단순 반복문 노가다로도 풀 수 있지만 map이 훨씬 깔끔한 것 같다.