본문 바로가기

백준/C++

[Baekjoon/C++] 2754번 - 학점계산

Baekjoon Online Judge

문제로 이동

 

문제

어떤 사람의 C언어 성적이 주어졌을 때, 평점은 몇 점인지 출력하는 프로그램을 작성하시오.

A+: 4.3, A0: 4.0, A-: 3.7

B+: 3.3, B0: 3.0, B-: 2.7

C+: 2.3, C0: 2.0, C-: 1.7

D+: 1.3, D0: 1.0, D-: 0.7

F: 0.0

 

입력

첫째 줄에 C언어 성적이 주어진다. 성적은 문제에서 설명한 13가지 중 하나이다.

 

출력

첫째 줄에 C언어 평점을 출력한다.

 


예제 입력 예제 출력
A0 4.0

풀이

#include <iostream>
using namespace std;

int main() {
	char sign[3] = {'+', '0', '-'}; // 성적의 부호
	double score[3] = { 4.3, 4.0, 3.7 }; // 각 부호의 최고 점수

	string c;
	cin >> c;

	double num = 0; // 평점

	// 평점 구하기
	if (c[0] != 'F') {
		int i;
		for (i = 0; i < 3; i++)
			if (sign[i] == c[1]) break;

		int n = c[0] - 'A';
		num = score[i] - n;
	}

	// 소수점 자리 고정
	cout << fixed;
	cout.precision(1);

	// 출력
	cout << num << endl;
	
	return 0;
}

A+와 B+, A0와 B0, A-와 B-의 점수 차이는 모두 1이므로 소수 부분은 같은 부호라면 F만 예외적으로 다르고 나머지는 모두 같다. 이를 이용해서 부호와 그 부호의 최고 점수를 미리 저장한 뒤 이를 이용해 문제를 풀었다.