https://www.acmicpc.net/problem/2755
문제
최백준이 이번 학기에 들은 과목과 학점 그리고 성적이 주어졌을 때, 평균 평점을 계산하는 프로그램을 작성하시오.
성적은 A+~F까지 총 13개가 있다.
A+: 4.3, A0: 4.0, A-: 3.7
B+: 3.3, B0: 3.0, B-: 2.7
C+: 2.3, C0: 2.0, C-: 1.7
D+: 1.3, D0: 1.0, D-: 0.7
F: 0.0
평균 평점은 각 과목의 학점*성적을 모두 더한 뒤에, 총 학점으로 나누면 된다.
코드
grades = {'A+':4.3, 'A0':4.0, 'A-':3.7,
'B+':3.3, 'B0':3.0, 'B-':2.7,
'C+':2.3, 'C0':2.0, 'C-':1.7,
'D+':1.3, 'D0':1.0, 'D-':0.7,
'F':0.0}
num = int(input())
totalG = totalN = 0
for i in range(num):
s, n, g = map(str, input().split())
totalG += int(n) * grades.get(g)
totalN += int(n)
ans = round(totalG/totalN, 3) + 10**-10
print(f'{ans:.2f}')
풀이
솔직히 코드 짜는 건 진짜진짜 쉽다... 문제는 부동소수점 오차 보정을 하는데에 있다.
1. 딕셔너리를 이용해 성적표를 입력한다.
2. 과목수를 입력받는다.
3. 이제 과목수만큼 반복해서 학점과 성적을 더한다.
4. 소수점 셋째 자리에서 반올림을 하기위해 round를 사용하고 부동소수점 오차 보정을 위해 10**-10을 해준다.
4-1. 오차 보정 안 하면 반내림되는 경우가 있어 절대로 정답이 되지 않는다...
5. 그리고 나온 결과를 소수점 둘째 자리까지만 출력해 주면 끝.
'백준 > 브론즈1' 카테고리의 다른 글
| [Python] 백준 1292번 - 쉽게 푸는 문제 (1) | 2025.04.30 |
|---|---|
| [Python] 백준 1157번 - 단어 공부 (0) | 2025.04.29 |
| [Python] 백준 1037번 - 약수 (0) | 2025.04.28 |
| [Python] 백준 1032번 - 명령 프롬프트 (0) | 2025.04.28 |
| [Python/C] 백준 2609번 - 최대공약수와 최소공배수 (0) | 2025.04.27 |