문제
20개 과목의 과목명, 학점, 등급이 주어질 때, P(Pass) 과목을 제외한 전공 평점(가중 평균)을 계산하라.
입력
20줄에 걸쳐 과목명, 학점(실수), 등급이 주어진다.
출력
전공 평점을 소수점 6자리까지 출력한다.
예제
| 입력 | 출력 |
|---|---|
| (20줄) | 3.284483 |
풀이
각 등급을 숫자로 변환하고, (학점 × 등급값)의 합을 총 학점으로 나누어 가중 평균을 구한다. P 과목은 제외한다.
- 등급-숫자 매핑 배열을 정의한다 (A+=4.5, A0=4.0, ..., F=0)
- 각 과목의 등급이 P가 아니면 학점을 total에 누적하고, 학점 × 등급값을 result에 누적한다
- result / total을 소수점 6자리로 출력한다
핵심 아이디어: 가중 평균 공식에서 P 과목은 분모/분자 모두 제외하면 된다.
코드
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":
total += p
result += p * grade[rating.index(g)]
print("%.6f" % (result / total))복잡도
- 시간: O(1) (고정 20개 과목)
- 공간: O(1)