작성일 :

문제 링크

2754번 - 학점계산

설명

학점 문자열이 주어지는 상황에서, 13가지 학점 중 하나(A+, A0, A-, B+, B0, B-, C+, C0, C-, D+, D0, D-, F)가 주어질 때, 해당 학점에 대응하는 평점을 소수 첫째 자리까지 출력하는 문제입니다.

평점 환산 규칙은 다음과 같습니다:

  • A: 4.0, B: 3.0, C: 2.0, D: 1.0, F: 0.0
  • +가 붙으면 0.3 추가, -가 붙으면 0.3 감소, 0은 변동 없음


접근법

학점의 첫 문자로 기본 평점을 결정합니다.

F가 아닌 경우, 두 번째 문자를 확인하여 +이면 0.3을 더하고, -이면 0.3을 빼서 최종 평점을 계산합니다.

소수 첫째 자리까지 고정 소수점 형식으로 출력합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Globalization;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var grade = Console.ReadLine()!;
      var score = 0.0;

      score = grade[0] switch {
        'A' => 4.0,
        'B' => 3.0,
        'C' => 2.0,
        'D' => 1.0,
        _ => 0.0
      };

      if (grade[0] != 'F' && grade.Length > 1) {
        if (grade[1] == '+') score += 0.3;
        else if (grade[1] == '-') score -= 0.3;
      }

      Console.WriteLine(score.ToString("F1", CultureInfo.InvariantCulture));
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string grade; cin >> grade;
  double score = 0.0;

  switch (grade[0]) {
    case 'A': score = 4.0; break;
    case 'B': score = 3.0; break;
    case 'C': score = 2.0; break;
    case 'D': score = 1.0; break;
    default: score = 0.0; break;
  }

  if (grade[0] != 'F' && grade.size() > 1) {
    if (grade[1] == '+') score += 0.3;
    else if (grade[1] == '-') score -= 0.3;
  }

  cout << fixed << setprecision(1) << score << "\n";
  
  return 0;
}