[백준] 25206, 너의 평점

YUN·2026년 2월 22일

C++

목록 보기
43/82



문제가 길지만, 결국 학점을 계산하는 문제이다.

A+,A0,B+,,,D0,F,P 등의 학점을 어떻게 숫자에 매핑시킬지가 관건이다.
(또한 자료형을 double을 써야한다. 평균 내야하므로)

1. 나의 풀이

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

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    string s1,s2,s3;
    double grade=0;
    double temp_grade;
    int div=0;
    for(int i=0;i<20;i++) {
        cin >> s1 >> s2 >> s3;
        if(s3 == "P") continue;
        else if(s3 == "F") div+=stoi(s2);
        else {
            temp_grade = 4.5-(s3[0]-'A');
            if (s3[1] == '0') temp_grade-=0.5;
            div+=stoi(s2);
            grade+=stoi(s2)*temp_grade;
        }
    }
    cout << grade/div;
    
    
    return 0;
}

숫자의 규칙성을 기반으로 풀이했다.

예를들어 4.5-'B'-'A' 를 하면 3.5 가 나온다. 이를 이용해서 별도의 매핑없이 수식으로 문자 -> 숫자 매핑을 진행했다.

2. 다른 풀이

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s1, s2, s3;
    double total_point=0;
    double total_grade=0;
    double temp_grade;
    for(int  i=0;i<20;i++) {
        cin >> s1 >> s2 >> s3;
        if(s3[0] == 'P') continue;
        total_point += stoi(s2);
        if(s3[0] == 'F') continue;
        if(s3[0] == 'A') temp_grade=4.0;
        else if(s3[0] == 'B') temp_grade = 3.0;
        else if(s3[0] == 'C') temp_grade = 2.0;
        else temp_grade = 1.0;
        if(s3[1]=='+') temp_grade+=0.5;
        total_grade += stoi(s2)*temp_grade;
    }
    cout << total_grade/total_point;
    return 0;
}

훨씬 직관적인 풀이이다.

P,F 성적은 continue로 처리하고 -> 다른 성적의 경우에는 앞 글자로 정수 부분을 맞춰준다. 이후에 뒷 부분이 +면 0.5를 더해준다.

이렇게 if-else if-else 문을 활용해 문자->숫자 매핑을 진행하는 풀이이다.

나의 코드보다 훨씬 더욱 직관적이고 좋은 코드인듯하다.

3. 배운 점 (느낀 점)

(1) stoi("3.0") 은 int 3을 반환한다.

(2) 문자열 인덱스 접근

(1) string s="dfa" 일때 s[0] 을 하면 s[0]'d'가 된다.

(2) 만약 s[0]='a'와 같이 대입 연산자의 좌변에 s[0] 이 쓰이는 경우 원본 수정도 가능하다.

(3) 평균내는 문제는 double이나 float으로

평규내는 문제는 a/b에서 a또는 b중 하나라도 double이나 float이어야 실수 계산값을 반환한다.

(4) 문법을 완벽히 숙지할수는 없다.

코딩테스트를 준비함에있어, 문법을 하나 하나 다 완벽히 숙지할수는 없다.

그냥 내가 알고있는 코드 블럭들을 잘 조합해서 문제를 해결해 나가는 것이다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글