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

2022. 10. 11. 12:15PS (Program Solving)/BOJ (백준)

문제 설명

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

 

25206번: 너의 평점은

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

www.acmicpc.net

백준 BOJ 25206번 너의 평점은 문제 사진1
백준 BOJ 25206번 너의 평점은 문제 사진2

 

접근 방법 - 수학적 사고력을 이용한 연산 문제

백준의 25206번 문제는 연산력과 아주 조금의 사고력을 이용하여 해결해야 하는 문제이다.

해당 문제는, 입력값으로 주어지는 과목과 학점 및 평점을 통하여 총 전공 평점을 구하여 출력해야 하는 문제이다.

이 문제의 경우에는 대학교의 평점 계산 방법만 어느 정도 알고 있다면 어렵지 않게 풀 수 있을 것으로 예상된다.

혹시나 이 연산 방법을 모른다면 아래를 참고해보길 바란다.

* 평점: 모든 과목의 평점에 대한 평균
평점 = ((학점)*(등급에 대한 평점) + (학점)*(등급에 대한 평점) + ... ) / 총 학점
(P/F 과목의 경우, P는 연산에서 제외하고 F는 그 과목의 학점, 0점으로 연산에 포함해야 한다.)

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 총평점을 저장할 변수 sum과 총학점을 저장할 변수 cnt를 각각 0으로 초기화하여 선언한다.

(이때, 학점과 평점 모두 실수형으로 연산해야 하기 때문에 double형으로 선언한다.)

 

2) 과목이 20개이기 때문에, 반복문을 20번 수행하면서 아래의 연산을 취한다.

- 과목명(sub), 학점(s), 등급(sc)을 순차적으로 입력받는다. (사실 sub는 사용할 일이 없다.)

만일 sc가 'P'라면, 이 과목은 평점 연산에서 제외해야 하기 때문에 continue문을 통해 다음 입력을 받도록 한다.

- 등급을 평점으로 변환하기 위한 변수 score를 0으로 초기화하여 선언한다.

- 2개의 switch문을 통해 입력받은 등급을 평점으로 변환한다.

1. 알파벳에 따른 숫자 변환: A(4.0), B(3.0), C(2.0), D(1.0) (F는 어차피 0점이기 때문에 따로 연산하지 않는다.)
2. 기호에 따른 숫자 변환: +(0.5 추가) (0은 어차피 추가로 수행할 연산이 필요 없기 때문에 따로 연산하지 않는다.)

- 연산 완료된 score(평점)을 s(학점)와 곱한 뒤 sum(총 평점)에 더하도록 한다.

- s(학점)를 cnt(총 학점)에 더하도록 한다. 

 

3) 입력값을 모두 받은 뒤 연산도 끝났다면, sum(총 평점)에 cnt(총 학점)을 나누어 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 25206번 코드
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);   cout.tie(NULL);
    
    double sum = 0;
    double cnt = 0;
    for (int i = 0;i < 20;i++) {
        string sub; double s;   string sc;
        cin >> sub >> s >> sc;
        if (sc == "P") { continue; }

        double score = 0;
        switch (sc[0]) {
        case 'A':   score = 4;  break;
        case 'B':   score = 3;  break;
        case 'C':   score = 2;  break;
        case 'D':   score = 1;  break;
        }
        if (sc[1] == '+') { score += 0.5; }

        sum += score * s;
        cnt += s;
    }

    cout << sum / cnt << endl;
}

 

제출 결과

백준 BOJ 25206번 너의 평점은 문제 C++ 제출 결과

(2022.08.18 백준 25206번 문제 제출 결과)

반응형