본문 바로가기
백준

[백준] 2754번 - 학점계산

by 템닉___ 2024. 3. 18.

문제:


시도 횟수: 1번

처음 생각한 방법: 그냥 if else에 다 넣어버렸다. 솔직히 양심이 아픈 방법이긴 했지만, 어떻게 보면 가장 효율적이지 않을까 하는 생각도 했다.

내 코드:

#include <bits/stdc++.h>
using namespace std;

int main()
{
   string s;
    cin >> s;
    if (s=="A+") {
        printf("4.3");
    } else if (s=="A0") {
        printf("4.0");
    }else if (s=="A-") {
        printf("3.7");
    }else if (s=="B+") {
        printf("3.3");
    }else if (s=="B0") {
        printf("3.0");
    }else if (s=="B-") {
        printf("2.7");
    }else if (s=="C+") {
        printf("2.3");
    }else if (s=="C0") {
        printf("2.0");
    }else if (s=="C-") {
        printf("1.7");
    }else if (s=="D+") {
        printf("1.3");
    }else if (s=="D0") {
        printf("1.0");
    }else if (s=="D-") {
        printf("0.7");
    }else if (s=="F") {
        printf("0.0");
    }

   return 0;
}

모범답안: 

#include<cstdio>
char a,b;
int main() {
	scanf("%c%c", &a, &b);
	if (a == 'F') puts("0.0");
	else {
		float t = b == '0' ? 0 : b == '+' ? 0.3 : -0.3;
		printf("%.1f", 'E' - a+t);
	}
	return 0;
}

C스타일이긴 하지만 로직이 깔끔하다. 삼항연산자로 +, 0, - 일때를 계산해 주었고, 
아스키코드로 계산되어서 'E':69에서 a에 해당하는 값의 아스키코드를 빼고 t를 더해준다.
a가 A라면 65를 빼고, B라면 66을 빼는 식이다.

내 코드의 개선할 점: 로직 자체를 너무 대충 구현했다. 문자와 숫자를 오갈때 아스키코드를 항상 떠올리자.

알고리즘 분류: 구현, 문자열

난이도: 브론즈 III

복습하면서 참고해본 블로그 목록:  X

 

'백준' 카테고리의 다른 글

[백준] 2475번 - 검증수  (0) 2024.03.18
[백준] 15964번 - 이상한 기호  (0) 2024.03.18
[백준] 10872번 - 팩토리얼  (0) 2024.03.18
[백준] 2741번 - N 찍기  (0) 2024.03.18
[백준] 2420번 - 사파리월드  (0) 2024.03.18