백준 25206번 [C] -너의 평점은 (구조체, 문자열 비교 활용)

10thouseo·2023년 2월 27일
0

Beakjoon

목록 보기
3/4

문제

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

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

치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.

전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.

인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.

A+ 4.5
A0 4.0
B+ 3.5
B0 3.0
C+ 2.5
C0 2.0
D+ 1.5
D0 1.0
F 0.0

P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.

과연 치훈이는 무사히 졸업할 수 있을까?


입력

20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.


소스코드

#include <stdio.h>
#include <string.h>

typedef struct {
    char name[50];
    float credit;
    char grade[2];
}student;

int main() {
    student arr[20] = { 0 };
    float sumFin = 0.0;
    float sumCredit = 0.0;

    for (int i = 0; i < 20; i++) {
        scanf("%s", arr[i].name);
        scanf("%f", &arr[i].credit);
        scanf("%s", arr[i].grade);

        if (strcmp(arr[i].grade, "A+") == 0) {
            sumFin += arr[i].credit * 4.5;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "A0") == 0) {
            sumFin += arr[i].credit * 4.0;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "B+") == 0) {
            sumFin += arr[i].credit * 3.5;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "B0") == 0) {
            sumFin += arr[i].credit * 3.0;
            sumCredit += arr[i].credit; 
        }
        if (strcmp(arr[i].grade, "C+") == 0) {
            sumFin += arr[i].credit * 2.5;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "C0") == 0) {
            sumFin += arr[i].credit * 2.0;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "D+") == 0) {
            sumFin += arr[i].credit * 1.5;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "D0") == 0) {
            sumFin += arr[i].credit * 1.0;
            sumCredit += arr[i].credit;
        }
        if (strcmp(arr[i].grade, "F") == 0) {
            sumFin += arr[i].credit * 0;
            sumCredit += arr[i].credit;       
        }
        else continue;
    }

    printf("%f", sumFin / sumCredit);

    return 0;
}

코드 설명

강의의 이름과 학점 그리고 강의 평점을 가진 구조체를 활용했다. 유저에게 총 20개의 강의에 대한 정보를 받아야 하므로 해당 구조체를 배열로 선언해주었다.

우리는 강의 평점을 문자열 형태로 값을 받기 때문에 계산을 위해 자료형을 바꿔줘야 한다. 따라서 유저에게 강의 평점을 입력 받고 strcmp 함수를 이용해서 문자열을 비교해주었다. 만약 강의 평점이 A+라면 학점 * 강의평점을 의미하는 변수 sumFin에 그 값을 더해주었다. 그리고 우리는 학점의 합도 알아야 하기에 학점 값을 sumCredit변수에 더해주었다.
마지막으로 sumFin 값을 sumCredit으로 나눈 값을 출력해주면 된다.


여담

처음에 문제를 제대로 읽지 않아 어려움을 겪었다. 평균을 구하는 문제이기에 "학점 * 강의 평점 값에다 전체 20개에서 P학점을 받은 강의의 개수를 뺀 값을 나누는 문제인줄 알고 헤매었다. 문제 특히, 수식은 꼼꼼하게 읽어야겠다...

profile
냉면 러버

0개의 댓글