티스토리 뷰

반응형
 

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

www.acmicpc.net

 

문제

어떤 사람의 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

입력

첫째 줄에 C언어 성적이 주어진다. 성적은 문제에서 설명한 13가지 중 하나이다.

출력

첫째 줄에 C언어 평점을 출력한다.

예제 입력 1 복사

A0

예제 출력 1 복사

4.0

 

 

이 문제는 내가 귀찮기도 해서 그냥 노가다로 풀었다.

 

그런데 더 똑똑하게 하려면 해싱을 이용하면 될 것 같다.

 

이렇게 풀지 말라고 미래의 나에게 경고하며 예시를 올린다.

 

a = input()

if a == 'F':
        print(0.0)

elif a[1] == '+':
    if a[0] == 'A':
        print(4.3)
    elif a[0] == 'B':
        print(3.3)
    elif a[0] == 'C':
        print(2.3)
    elif a[0] == 'D':
        print(1.3)

        
elif a[1] == '0':
    if a[0] == 'A':
        print(4.0)
    elif a[0] == 'B':
        print(3.0)
    elif a[0] == 'C':
        print(2.0)
    elif a[0] == 'D':
        print(1.0)

            
elif a[1] == '-':
    if a[0] == 'A':
        print(3.7)
    elif a[0] == 'B':
        print(2.7)
    elif a[0] == 'C':
        print(1.7)
    elif a[0] == 'D':
        print(0.7)

 

이렇게 풀면 백프로 뺨맞는다. 조심하자.

 

그나마 초보자들이 이해할만만 예제는 다음과 같다.

 

a={'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}
print(a[input()])

 

이게 가능한 이유는 해싱이 잘 되어서이다. 해싱은 위와 같이 어떠한 문자열에 어떠한 값을 대입해서 나열해주는 것이다.

 

이미 위의 예시가 가장 이해하기 쉬운 예시이므로 더 자세한 설명은 생략한다. 

 

따라서 input()을 넣었을 때 괄호 안이 a[A0]와 같이 나오게 되고, A0: 4.0 이 해싱 되어 있으므로 예제 출력인 4.0이 출력된다.

반응형