본문 바로가기
백준/구현

백준 25206 c++ "너의 평점은" -PlusUltraCode-

by PlusUltraCode 2025. 9. 14.

https://www.acmicpc.net/problem/25206

 

[필자 사고]

간단한 구현 문제이다.

문제에서 주어진 조건에 맞게 코드를 짜면 된다.

다만 조심해야 될건 P관련 처리다

필자는 P관련 문자가 오면 continue로 건너 뛰는 형태로 해당 문제를 타파했다.

또한 소수점 관련 header파일은 #include <iomanip> 

cout<<fixed<<setprecision(6)<<num<<"\n" 와 같은 형태로 사용한다고 배웠다.

 

아래는 자세한 코드해설이다.

[코드 해설]

  1. getGradeScore 함수
    • 문자열 형태의 등급("A+", "B0", "C+" 등)을 받아서 해당하는 학점 점수(double)를 반환합니다.
    • 예를 들어 "A+"면 4.5, "B0"면 3.0, "F"면 0.0을 반환합니다.
    • 함수의 마지막에 기본 반환값이 없다는 점은 위험 요소입니다.
    • 만약 예상하지 못한 문자열이 들어오면 값이 반환되지 않아 정의되지 않은 동작이 발생할 수 있습니다.
  2. main 함수
    • 변수 sum : 학점 × 점수의 누적 합.
    • 변수 count : 총 학점 수.
    • 입력은 무한 루프처럼 while (cin >> str)로 처리됩니다.
      • 먼저 과목명을 읽고(str), 이어서 학점(credit)과 등급(grade)을 입력받습니다.
      • 등급이 "P"라면, 계산에서 제외하고 넘어갑니다.
      • 그 외의 경우에는 getGradeScore로 점수를 얻고, 학점 × 점수를 합산(sum)하고 학점(count)을 누적합니다.
    • 모든 입력이 끝나면, sum / count를 출력합니다.
    • 출력은 fixed와 setprecision(6)을 사용하여 소수점 이하 여섯 자리까지 고정해 보여줍니다.

[소스 코드]

#include <iostream>
#include <vector>
#include <cstring>
#include <iomanip>

using namespace std;

double getGradeScore(string grade) {
	if (grade == "A+")return 4.5;
	else if (grade == "A0")return 4.0;
	else if (grade == "B+") return 3.5;
	else if (grade == "B0")return 3.0;
	else if (grade == "C+")return 2.5;
	else if (grade == "C0")return 2.0;
	else if (grade == "D+")return 1.5;
	else if (grade == "D0")return 1.0;
	else if (grade == "F")return 0.0;
}

int main(void) {
	string str;
	double sum = 0.0;
	double count = 0;
	while (cin >> str) {
		double credit;
		string grade;

		cin >> credit >> grade;
		if (grade == "P")continue;
		double gradeScore = getGradeScore(grade);
		sum += gradeScore * credit;
		count += credit;
	}

	

	cout << fixed << setprecision(6) << sum / count;
}