■ 25206번 너의 평점은 문제
■ 코드 풀이
풀이 자체는 단순한 편입니다. 과목명은 필요 없는 값이니 무시하고, 학점과 등급만을 활용하여 계산하면 됩니다. 그런데 이 문제에서 이해가 안 되는 부분이 하나 있습니다.
아래 코드를 보시면 알겠지만, 저는 이 문제에 처음 접근할 때 list를 활용했습니다. 학점과 등급을 곱한 값을 list에 append 하고 최종 출력 시, 학점의 합과 나누는 방식이었습니다. 저는 정답이라고 생각했는데, 아무리 제출해도 계속 오답 판정을 받았습니다. 혹시나 하는 마음에 list를 사용하지 않고 다시 코드를 작성하여 제출했더니 정답으로 처리되더군요.
두 방식의 차이가 뭘까, 계속 생각해 봤는데 개인적으로는 summation 과정에서 미세한 소수점 차이가 원인이 아닌가 싶네요. list에 append 하고 개별 element를 summation 하는 과정에서 정보 loss가 발생한 것이 아닌가 하고 조심스럽게 추측해 봅니다. 혹시 여러분은 원인을 알고 계신가요? (알고 계시다면 댓글 달아주세요. 개인적으로 궁금하네요.)
import sys
grade_list = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0','F']
grade_score_list = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0]
num_sum = 0
total = 0
for i in range(20):
#avg_grades = []
_, num, grade = sys.stdin.readline().split()
if grade == 'P':
continue
num = float(num)
num_sum += num
idx = grade_list.index(grade)
total += num*grade_score_list[idx]
#idx = grade_list.index(grade)
#avg_grades.append(num*grade_score_list[idx])
print("%.6f" % (total/num_sum))
오늘도 새로운 사실을 배웠네요. :)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 2566번 최댓값 문제 (0) | 2023.04.02 |
---|---|
[백준/Python] 2738번 행렬 덧셈 문제 (0) | 2023.04.01 |
[백준/Python] 1316번 그룹 단어 체커 문제 (0) | 2023.03.30 |
[백준/Python] 2941번 크로아티아 알파벳 문제 (0) | 2023.03.29 |
[백준/Python] 4344번 평균은 넘겠지 문제 (0) | 2023.03.28 |
댓글