문제
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!
치훈이의 전공평점을 계산해주는 프로그램을 작성해보자. 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다. 과연 치훈이는 무사히 졸업할 수 있을까?
인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.
| 평점 | 학점 |
|---|---|
| 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 |
data = [] # 과목명, 학점, 평점이 저장되는 리스트
for _ in range(20): # 반복문을 통해 데이터가 입력됨
grade = input()
data.append(grade)
# 문자열로 표현된 과목평점을 실수로 변환하기 위해 dictionary로 정의
grade_score = {'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}
score_list = [] # 각 과목별 평점을 추가할 리스트
total_credit_score = 0 # 학점의 총합
for i in range(len(data)): # 반복문으로 입력된 데이터를 처리함.
if data[i][-1] == 'F': # 학점이 F인 경우(한글자인 경우)
credit_score = float(data[i][-5:-2])
GPA = grade_score[data[i][-1]]
total_score = credit_score * GPA
total_credit_score += credit_score
score_list.append(total_score)
elif data[i][-1] == 'P': # 학점이 P인 경우에는 계산을 진행하지 않음.
continue
else:
credit_score = float(data[i][-6:-3])
GPA = grade_score[data[i][-2:]]
total_score = credit_score * GPA
total_credit_score += credit_score
score_list.append(total_score)
print(sum(score_list) / total_credit_score)
# match - case 구문을 활용한 간단한 방법
total_credit_score = 0 # 학점의 총합
total_score = 0 # 학점 * 과목 평점
for _ in range(20): # 20개 과목 입력
_, credit, grade = input().split() # 띄어쓰기를 기준으로 제시된 데이터를 split()으로 간단히 처리
credit = float(credit) # 학점 계산을 위해 실수형으로 변환
if grade == 'P':
continue
match grade:
case 'A+': grade = 4.5
case 'A0': grade = 4.0
case 'B+': grade = 3.5
case 'B0': grade = 3.0
case 'C+': grade = 2.5
case 'C0': grade = 2.0
case 'D+': grade = 1.5
case 'D0': grade = 1.0
case 'F': grade = 0.0
total_credit_score += credit
total_score += credit * grade
print(total_score / total_credit_score) # (학점 * 과목 평점) / 학점의 총합