문제
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])] : 입력문의 두 번째 글자의 인덱스 값에 따라 점수를 가감할 수 있도록 배열을 사용한다.