문제:

시도 횟수: 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 |