[백준 BOJ] 2754번 학점계산 (C++/cpp)

2022. 9. 29. 14:23PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2754번: 학점계산

어떤 사람의 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

www.acmicpc.net

백준 BOJ 2754번 학점계산 문제 사진

 

접근 방법 - 문자열 연산의 기본 문제

백준의 2754번 문제는 기본적인 문자열 연산으로 해결해야 하는 문제이다.

해당 문제는, 입력받은 학점에 대하여 평점을 출력해야 하는 문제이다.

필자의 경우에는, 문자열로 입력을 받은 뒤 한 글자마다 평점에 대한 연산을 수행하게끔 하였다.

A, B, C, D, F에 대한 연산과 +, -, 0에 대한 연산을 따로 수행하여 평점을 계산했다는 것이다.

여기서 문제의 예제를 보면 알겠지만, 4점 같은 경우에도 4.0으로 출력해야 하기 때문에 필자는 아래의 구문을 추가하여 코드를 작성해보았다.

// 소수점 첫 번째까지 출력하게끔 하는 구문 (C++ 문법)
cout << fixed;
cout.precision(1);

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

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

 

코드의 실행 순서

1) 문자열 형태로 학점(score)을 입력받는다.

 

2) 변수 s1을 double형으로 선언하여 0으로 초기화한다.

그리고 score의 첫 번째 글자에 있어 switch 구문 연산을 수행하여 아래처럼 연산을 한다.

- 'A' 인 경우에는 s1의 값을 4.0으로 수정한다.

- 'B' 인 경우에는 s1의 값을 3.0으로 수정한다.

- 'C' 인 경우에는 s1의 값을 2.0으로 수정한다.

- 'D' 인 경우에는 s1의 값을 1.0으로 수정한다.

('F'인 경우에는 진작에 부여할 값이 0이기 때문에 따로 연산하진 않는다.)

 

3) 변수 s2를 double형으로 선언하여 0으로 초기화한다.

그리고 score의 두 번째 글자에 있어 switch 구문 연산을 수행하여 아래처럼 연산을 한다.

다만, 이 연산은 score에 두 번째 글자가 존재할 때에만 수행하도록 한다. ('F'인 경우에는 수행할 필요가 없다.)

- '+'인 경우에는 s2의 값을 0.3으로 수정한다.

- '-'인 경우에는 s2의 값을 -0.3으로 수정한다.

(s2 변수는 s1에 추가적인 연산을 하기 위해 만들어둔 것인데, '0'인 경우에는 그럴 필요가 없기 때문에 따로 연산하지 않는다.)

 

4) 최종적으로 저장된 s1과 s2를 더한 값을 출력하고 실행 종료한다.

반응형

 

성공한 코드

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

//백준 2754번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);
	cout << fixed;
	cout.precision(1);
	
	string score;
	cin >> score;

	double s1 = 0;
	switch (score[0]) {
	case 'A':	s1 = 4.0;	break;
	case 'B':	s1 = 3.0;	break;
	case 'C':	s1 = 2.0;	break;
	case 'D':	s1 = 1.0;	break;
	}
	double s2 = 0;
	switch (score[1]) {
	case '+':	s2 = 0.3;	break;
	case '-':	s2 = -0.3;	break;
	}
	cout << s1 + s2 << endl;
}

 

제출 결과

백준 BOJ 2754번 학점계산 문제 C++ 제출 결과

(2022.04.10 백준 2754번 문제 제출 결과)

생각보다 더 쉽게 풀 수 있었던거였나...

반응형