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

[필자 사고]
간단한 구현 문제이다.
문제에서 주어진 조건에 맞게 코드를 짜면 된다.
다만 조심해야 될건 P관련 처리다
필자는 P관련 문자가 오면 continue로 건너 뛰는 형태로 해당 문제를 타파했다.
또한 소수점 관련 header파일은 #include <iomanip>
cout<<fixed<<setprecision(6)<<num<<"\n" 와 같은 형태로 사용한다고 배웠다.
아래는 자세한 코드해설이다.
[코드 해설]
- getGradeScore 함수
- 문자열 형태의 등급("A+", "B0", "C+" 등)을 받아서 해당하는 학점 점수(double)를 반환합니다.
- 예를 들어 "A+"면 4.5, "B0"면 3.0, "F"면 0.0을 반환합니다.
- 함수의 마지막에 기본 반환값이 없다는 점은 위험 요소입니다.
- 만약 예상하지 못한 문자열이 들어오면 값이 반환되지 않아 정의되지 않은 동작이 발생할 수 있습니다.
- 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;
}'백준 > 구현' 카테고리의 다른 글
| 백준 18258 c++ "큐 2" -PlusUltraCode- (0) | 2025.09.17 |
|---|---|
| 백준 1475 c++ "방 번호" -PlusUltraCode- (0) | 2025.09.14 |
| 백준 15653 c++ "구슬 탈출 4" -PlusUltraCode- (4) | 2025.08.27 |
| 백준 17141 c++ "연구소 2" -PlusUltraCode- (2) | 2025.08.25 |
| 백준 13459 c++ "구슬 탈출" -PlusUltraCode- (4) | 2025.08.08 |