Skip to content

[백준] 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)

Reference