[백준] 25206. 너의 평점은
평점을 계산해주는 프로그램을 작성해보자.
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값으로, P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
아래와 같이 해시테이블 자료구조로 만들어서 계산하면 빠르고 적은 메모리로 계산할 수 있다.
table = {
"A+": 4.5,
"A0": 4.0,
"B+": 3.5,
"B0": 3.0,
"C+": 2.5,
"C0": 2.0,
"D+": 1.5,
"D0": 1.0,
"F": 0.0,
}
score = total = 0
for _ in range(20):
_, p, g = input().split()
if g == "P":
continue
else:
p = float(p)
total += p
score += table[g] * p
print(score / total)
아래와 같이 데이터클래스를 활용하면 성능은 조금 부족하지만 코드의 가독성도 향상시키고 프로그램 내부에서 데이터를 쉽게 관리할 수 있다.
from dataclasses import dataclass
@dataclass
class Gp:
title: str
point: float
grade: str
def score(self):
return self.point * table[self.grade]
table = {
"A+": 4.5,
"A0": 4.0,
"B+": 3.5,
"B0": 3.0,
"C+": 2.5,
"C0": 2.0,
"D+": 1.5,
"D0": 1.0,
"F": 0.0,
}
array = []
total = 0
for _ in range(20):
t, p, g = input().split()
if g == "P":
continue
else:
p = float(p)
total += p
array.append(Gp(t, p, g).score())
print(sum(array) / total)