오늘의 TIL은 베이직 반에서 백준 문제를 푼 것을 바탕으로 작성했다.
1단계: 문제 분석
먼저, 문제를 분석했다. GPA는 (학점 × 과목평점)의 합 / 학점의 총합으로 계산한다고 했다. 그리고 "P" 등급인 과목은 GPA 계산에서 제외해야 했어. 이 조건을 고려하면서 풀어야 했다.
2단계: 등급-점수 매핑
그 다음, 각 과목의 등급을 점수로 매핑해야 했다. "A+"는 4.5, "A0"는 4.0처럼 딕셔너리로 등급과 점수를 연결해줬다. 이를 통해 과목 등급에 맞는 점수를 쉽게 조회할 수 있었다.
grade_to_points = {
"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.0
}
3단계: 데이터 입력 및 처리
입력 데이터를 처리해야 했다. 20개의 데이터를 input() 함수로 받았고, split()을 사용해 과목명, 학점, 등급을 분리했다. 학점은 실수형으로 변환해야 했고, 이를 통해 계산에 사용할 수 있도록 했다.
subject, credit, grade = input().split()
credit = float(credit)
4단계: GPA 계산
이제 GPA 계산을 해야 했다. 각 과목에 대해 "P" 등급을 제외하고 계산해야 했다. 학점과 과목평점을 곱한 값을 누적하고, 학점의 총합을 구한 뒤 GPA를 계산했다.
if grade == "P":
continue # "P"는 계산에서 제외
point = grade_to_points[grade] # 등급에 해당하는 점수
total_credits += credit # 학점 누적
weighted_sum += credit * point # (학점 × 과목평점) 누적
5단계: 출력 형식 처리
GPA를 계산한 후, 소수점 여섯 자리까지 출력해야 했다. 이를 위해 f-string을 사용해 소수점 자리를 고정시켰다.
print(f"{gpa:.6f}")
6단계: 전체 코드 및 테스트
마지막으로 모든 코드를 통합하고 테스트했다. total_credits가 0일 경우를 대비해 나누기 오류를 방지하는 조건도 추가했다. 입력이 정상적으로 처리되도록 테스트를 진행했다.
최종 코드:
grade_to_points = {
"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.0
}
total_credits = 0
weighted_sum = 0
for _ in range(20):
subject, credit, grade = input().split()
credit = float(credit)
if grade == "P":
continue
point = grade_to_points[grade]
total_credits += credit
weighted_sum += credit * point
gpa = weighted_sum / total_credits if total_credits > 0 else 0.0
print(f"{gpa:.6f}")
느낀점
이 문제를 풀면서 각 단계를 차례대로 풀어가야 했다는 점을 느꼈다. 문제를 명확히 분석하고, 그에 맞는 로직을 단계별로 풀어가면서 해결했다. 특히 "P" 등급을 제외하는 조건을 잘 처리한 점이 중요했어.
'내일배움캠프 TIL' 카테고리의 다른 글
| 2025.01.02TIL - 클래스 (2) | 2025.01.02 |
|---|---|
| 2024.12.31 TIL - 빅데이터/인공지능 기초 개념 정리 (1) | 2024.12.31 |
| 2024.12.27 TIL (0) | 2024.12.27 |
| 2024.12.26TIL (2) | 2024.12.26 |
| 2024.12.24 TIL (1) | 2024.12.24 |