티스토리 뷰
반응형
문제
어떤 사람의 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이 출력된다.
반응형