[백준_Python] 25206번: 너의 평점은

Jason·2023년 7월 21일
post-thumbnail

1. 문제


2. 문제 해석

1) 입력

과목명과 float 타입의 학점(credit), 등급이 한줄에 띄어쓰기 포함하여 주어지고 총 20개의 과목이 주어진다.

2) 출력

20개의 과목의 전공 평점을 출력해야 한다.
전공 평점 = ∑ (각 과목의 학점 * 등급에 따른 과목 평점) / 학점 총합

3) 유의할 제한 조건

P/F의 과목의 경우, 등급이 P가 나올 때 계산에서 제외

4) 풀이 설계

등급 별 과목 평점을 dict 타입으로 놓는다.
한 줄씩 입력 받고 과목명, 학점, 과목 평점 세 개로 구분하여 변수에 저장한다
등급이 P인 경우는 넘어가고 P가 아닌 경우는 루프를 돌면서 학점 과목 평점을 점차 쌓아준다.
출력시 쌓아 놓은 학점
과목 평점에 전체 학점을 나눠준다.

3. 작고 소중한 나의 풀이

grade_dict = {"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 }
sum_credit = 0
sum_credit_by_grade = 0

for i in range(20):
    subject, credit, grade = input().split()
    # 등급이 P가 아닌 경우만 학점 * 과목 평점을 쌓고, 학점도 쌓는다.
    # 과목 평점의 경우 앞에 정의한 dict에서 등급을 넣어 값을 가져온다
    if grade != "P":
        sum_credit = sum_credit + float(credit)
        sum_credit_by_grade = sum_credit_by_grade + credit * grade_dict[grade]

print(sum_credit_by_grade/sum_credit)

4. 아름다고 멋진 다른 풀이

1) 출력의 형태를 고려한다

rating = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0', 'F']
grade = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0]

total = 0	# 학점 총합을 담을 변수
result = 0	# (학점 * 과목평점) 총합을 담을 변수
for _ in range(20) :
    s, p, g = input().split()
    p = float(p)
    if g != 'P' :	# 등급이 P인 과목은 계산 안함
        total += p
        result += p * grade[rating.index(g)]

# 예제를 살펴보면 소수점 6번째 자리까지 표현이 되어 있다. 이 또한 반영함 
print(format(result / total, ".6f"))

5. 무엇을 배웠는가

간단한 문제일수록 풀이 자체가 비슷했던 것 같다.
내가 디테일한 부분을 아직은 잘 몰라서 비슷해 보이는 것일 수도 있겠다.

다른 분들의 코드를 보면서
소수점 n번째 자리까지 표현하는 방법에 대해서 알 수 있었다.

[소수점 자리수 지정]

(난 format(실수, 표기할 자리수) 형태로 나타내는 것이 가장 편하다)

profile
개발과 데이터에 관심이 많은 서버 개발자

0개의 댓글