https://www.acmicpc.net/problem/25206
- 치훈이의 전공평점을 계산해주기
- 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값
- 인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 아래의 표와 같음
- P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외
- 입력
- 20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어짐
- 출력
- 치훈이의 전공평점을 출력
- 정답과의 절대오차 또는 상대오차가 (10^{-4}) 이하이면 정답으로 인정
- 제한
- 1 ≤ 과목명의 길이 ≤ 50
- 과목명은 알파벳 대소문자 또는 숫자로만 이루어져 있으며, 띄어쓰기 없이 주어짐. 입력으로 주어지는 모든 과목명은 서로 다름.
- 학점은 1.0,2.0,3.0,4.0중 하나
- 등급은 A+,A0,B+,B0,C+,C0,D+,D0,F,P중 하나
- 적어도 한 과목은 등급이 P가 아님이 보장
- 시간 제한: 1초
- 메모리 제한: 1024 MB
"""
입출력 예시)
(예제 입력 1)
ObjectOrientedProgramming1 3.0 A+
IntroductiontoComputerEngineering 3.0 A+
ObjectOrientedProgramming2 3.0 A0
CreativeComputerEngineeringDesign 3.0 A+
AssemblyLanguage 3.0 A+
InternetProgramming 3.0 B0
ApplicationProgramminginJava 3.0 A0
SystemProgramming 3.0 B0
OperatingSystem 3.0 B0
WirelessCommunicationsandNetworking 3.0 C+
LogicCircuits 3.0 B0
DataStructure 4.0 A+
MicroprocessorApplication 3.0 B+
EmbeddedSoftware 3.0 C0
ComputerSecurity 3.0 D+
Database 3.0 C+
Algorithm 3.0 B0
CapstoneDesigninCSE 3.0 B+
CompilerDesign 3.0 D0
ProblemSolving 4.0 P
-> 3.284483
(예제 입력 2)
BruteForce 3.0 F
Greedy 1.0 F
DivideandConquer 2.0 F
DynamicProgramming 3.0 F
DepthFirstSearch 4.0 F
BreadthFirstSearch 3.0 F
ShortestPath 4.0 F
DisjointSet 2.0 F
MinimumSpanningTree 2.0 F
TopologicalSorting 1.0 F
LeastCommonAncestor 2.0 F
SegmentTree 4.0 F
EulerTourTechnique 3.0 F
StronglyConnectedComponent 2.0 F
BipartiteMatching 2.0 F
MaximumFlowProblem 3.0 F
SuffixArray 1.0 F
HeavyLightDecomposition 4.0 F
CentroidDecomposition 3.0 F
SplayTree 1.0 F
-> 0.000000
"""
## 의사코드 ##
# 등급별 과목평점 -> 딕셔너리
# grade_dic = {'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_score = 0 # 학점의 총합
# total = 0 # (학점 x 과목평점)의 합
# for _ in range(20):
# 등급이 P인 과목은 계산에서 제외
# if grade == 'P':
# continue
# else:
# 학점의 총합
# total_score += float(score)
# (학점 x 과목평점)의 합
# total += float(score) * float(grade_dic[grade])
# 전공평점 = 전공과목별 (학점 × 과목평점)의 합 / 학점의 총합
# print(format(total / total_score, ".6f"))
통과한 코드
# 등급별 과목평점
grade_dic = {'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_score = 0 # 학점의 총합
total = 0 # (학점 x 과목평점)의 합
for _ in range(20):
name, score, grade = input().split()
# 등급이 P인 과목은 계산에서 제외
if grade == 'P':
continue
else:
# 학점의 총합
total_score += float(score)
# (학점 x 과목평점)의 합
total += float(score) * float(grade_dic[grade])
# 전공평점 = 전공과목별 (학점 × 과목평점)의 합 / 학점의 총합
print(format(total / total_score, ".6f"))