Algorithm/백준

[BOJ] 2574 - 학점계산

비번변경 2021. 10. 22. 14:46

문제

https://www.acmicpc.net/problem/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        

 

풀이

1. 내가 푼 방법

성적과 평점을 살펴보면 아래와 같은 사실을 알 수 있다.

  • 성적의 첫 번째 글자가 기본 점수를 결정한다.
  • 성적에 두 번째 글자에 따라 기본 점수에 0.3점을 가감한다.

이 규칙을 활용하기 위해 성적의 첫 번째 글자를 키로 하고 기본 점수를 값으로 하는 딕셔너리 하나와 성적의 두 번째 글자를 키로 하고 가감 점수를 값으로 하는 딕셔너리 하나를 선언하여 값을 계산해 출력했다.

f = {'A': 4, 'B': 3, 'C': 2, 'D': 1}
la = {'+': 0.3, '0': 0, '-': -0.3}
s = input().strip()
print(f"{f[s[0]] + la[s[1]] if s != 'F' else 0.0:.1f}")

 

2. 비교문 사용

단순하게 모든 경우에 대해 비교문을 사용하는 방법도 있다. 간단하지만 경우가 많으면 많아질수록 코드가 길어질 수 있다.

g = input()

if g == 'A+':
    print(4.3)
if g == 'A0':
    print(4.0)
if g == 'A-':
    print(3.7)
if g == 'B+':
    print(3.3)
if g == 'B0':
    print(3.0)
if g == 'B-':
    print(2.7)
if g == 'C+':
    print(2.3)
if g == 'C0':
    print(2.0)
if g == 'C-':
    print(1.7)
if g == 'D+':
    print(1.3)
if g == 'D0':
    print(1.0)
if g == 'D-':
    print(0.7)
if g == 'F':
    print(0.0)

 

3. 문자열 및 배열 인덱싱 사용

1번 풀이에서 딕셔너리를 배열 또는 문자열로 대체하여 푸는 방법이다.

g = input()+'0' 
print(f'{"FDCBA".index(g[0]) + [0.3, 0, -0.3][["+", "0", "-"].index(g[1])]:.1f}')
  • g = input()+'0' : F 성적 입력 시 에러가 발생하지 않도록 입력문에 문자열을 연결하여 저장한다.
  • "FDCBA". index(g [0]) : 입력문의 첫 번째 글자의 인덱스 값이 기본 점수가 될 수 있도록 문자열을 사용한다.
  • [0.3, 0, -0.3][["+", "0", "-"].index(g[1])] : 입력문의 두 번째 글자의 인덱스 값에 따라 점수를 가감할 수 있도록 배열을 사용한다.