오늘의 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

+ Recent posts