[C++] 백준 2754번: 학점계산

Been·2023년 12월 4일
0

백준

목록 보기
20/23

문제 원문

최종 작성한 코드 (정답)

#include <iostream>
using namespace std;

void PrintGrade(float credit, char* gradePtr)
{
	if (gradePtr[1] == 43) // +
	{ 
		credit = credit + 0.3;
		cout << credit;
	}
	else if (gradePtr[1] == 45) // -
	{
		credit = credit - 0.3;
		cout << credit;
	}
	else if (gradePtr[1] == 48) // 0
	{
		credit = credit;
		cout << credit;
	}
}

int main()
{
	cout << fixed;
	cout.precision(1);

	char grade[3];
	char* gradePtr = grade;
	cin >> grade;

	float credit = 0;

	switch (grade[0])
	{
	case 65: // A
		credit = credit + 4;
		PrintGrade(credit, gradePtr);
		break;
	case 66: // B
		credit = credit + 3;
		PrintGrade(credit, gradePtr);
		break;
	case 67: // C
		credit = credit + 2;
		PrintGrade(credit, gradePtr);
		break;
	case 68: // D
		credit = credit + 1;
		PrintGrade(credit, gradePtr);
		break;
	case 70: // F
		credit = credit;
		cout << credit;
		break;
	}

}

코드 풀이

  1. 학점을 char grade[3]으로 받아온다.
  1. 계산된 학점을 출력할 변수 float credit을 만든다.
  1. switch-case-break 문을 통해 학점의 알파벳에 따라 평점을 나눈다.
    이 때 case 뒤에 쓰인 숫자는 알파벳의 ascii 코드이다.
  1. 학점의 '+', '-', '0'을 읽어 평점을 계산한다.
    이 메커니즘을 함수 void PrintGrade()로 만들어 코드의 중복을 줄였다.
    함수의 인자는 2개이다.
    float credit 의 정보를 가져와서,
    char* gradePtr를 통해 grade문자열의 2번째 자리를 읽어온다.
    2번째 자리의 종류에 따라 credit을 계산하여 출력한다.
  1. 만약 학점이 F일 경우, credit의 초기값 0을 그냥 출력해준다.

주의사항

소수점 한자릿수까지 출력하기 위해 int main()함수가 시작할 때

cout << fixed;
cout.precision(1);

를 넣어주었다.
이 때 fixed를 넣어주지 않으면 precision이 정수자리를 포함해 자릿수를 세게됨을 주의한다.

profile
콧콧코코콧코콧ㅅ

0개의 댓글