[백준/Python] 2754 - 학점계산

orangesnail·2025년 3월 2일

백준

목록 보기
45/169

https://www.acmicpc.net/problem/2754


처음 코드

적당히 조건을 나눠서 구현하는게 더 효율적일줄 알고.. 아래처럼 짜버렸다..

score = list(input())

if score[0] == "A":
    gpa = 4.3
elif score[0] == "B":
    gpa = 3.3
elif score[0] == "C":
    gpa = 2.3
elif score[0] == "D":
    gpa = 1.3
else:
    gpa = 0.0

if score[1] == "0":
    gpa -= 0.3
elif score[1] == "-":
    gpa -= 0.6

print(gpa)

개선된 코드

조건문을 쓰면 쓸수록 시간복잡도가 올라간다.
이 문제처럼 특정 값과 값이 대응되는 케이스의 경우 딕셔너리를 사용하면 O(1)으로 빠르게 찾을 수 있다!
(*리스트에서는 linear search를 사용해 처음부터 끝까지 비교하지만, 딕셔너리에서는 해시테이블을 이용해 키로 직접 접근이 가능하기 때문이다.)

score = input()

dict = {
    "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(dict[score])
profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글