


과목명과 float 타입의 학점(credit), 등급이 한줄에 띄어쓰기 포함하여 주어지고 총 20개의 과목이 주어진다.
20개의 과목의 전공 평점을 출력해야 한다.
전공 평점 = ∑ (각 과목의 학점 * 등급에 따른 과목 평점) / 학점 총합
P/F의 과목의 경우, 등급이 P가 나올 때 계산에서 제외
등급 별 과목 평점을 dict 타입으로 놓는다.
한 줄씩 입력 받고 과목명, 학점, 과목 평점 세 개로 구분하여 변수에 저장한다
등급이 P인 경우는 넘어가고 P가 아닌 경우는 루프를 돌면서 학점 과목 평점을 점차 쌓아준다.
출력시 쌓아 놓은 학점 과목 평점에 전체 학점을 나눠준다.
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)
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"))
간단한 문제일수록 풀이 자체가 비슷했던 것 같다.
내가 디테일한 부분을 아직은 잘 몰라서 비슷해 보이는 것일 수도 있겠다.
다른 분들의 코드를 보면서
소수점 n번째 자리까지 표현하는 방법에 대해서 알 수 있었다.
(난 format(실수, 표기할 자리수) 형태로 나타내는 것이 가장 편하다)