백준C(심화1)

쿵ㅇ양·2024년 1월 5일

알고리즘

목록 보기
4/18

백준25206-너의 평점은

치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
1 ≤ 과목명의 길이 ≤ 50
과목명은 알파벳 대소문자 또는 숫자로만 이루어져 있으며, 띄어쓰기 없이 주어진다. 입력으로 주어지는 모든 과목명은 서로 다르다.
학점은 1.0,2.0,3.0,4.0중 하나이다.
등급은 A+,A0,B+,B0,C+,C0,D+,D0,F,P중 하나이다.
적어도 한 과목은 등급이 P가 아님이 보장된다.

flow

경우의 수 최대한 적게 나누는게 중요
예외 : P인경우 중요!

1. A+,A0..로 총 8가지의 경우로 나누는게 아닌 ABC로 먼저 경우 나누고 +붙어있는지로 나누기

2.P인경우에 sumcredit(총학점)에 포함이 안됨!

3. float형이 아닌 double형 사용

#include <stdio.h>

int main() {

  char name[51];
  char grade[3];
  
  //소수점 출력:double
  double credit;

  double sumCredit = 0.0; // 총학점
  double temp; // ABC점수를 숫자로 바꾼것
  double res = 0.0; // 학점*점수
  for(int i = 0; i < 20; i++) {
    scanf("%s %lf %s", name, &credit, grade);
    
    //P이면 sumcredit에 포함안되고 다시 반복문으로
    if(grade[0] == 'P') continue;
    
    sumCredit += credit;
    
    //F이면 sumcredit에 포함되고 반복문으로
    if(grade[0] == 'F') continue;

    //+고려하지 않고 ABC로만 구분
    if(grade[0] == 'A') temp = 4;
    else if (grade[0] == 'B') temp = 3;
		else if (grade[0] == 'C') temp = 2;
    else temp = 1;
    
    //+가 붙어있다면 0.5더해주기
    if (grade[1] == '+') temp += 0.5;
    
    //학점*점수 누적해서 res에 더해주기
    res += credit * temp;
  }

  printf("%lf", res / sumCredit);

  return 0;
}
profile
개발을 공부하고 있는 대학생

0개의 댓글