https://www.acmicpc.net/problem/29614
s이 문제에 주어진 등급에는 별도의 구분자가 없으므로 분류를 잘해주어야 합니다.
학점은 A부터 F까지 존재하는데, F를 제외한 A~D까지는 학점의 0.5가 높은 +등급이 존재합니다.
올바른 학점을 구하기 위해선 구분점이 필요합니다.
그래서 저는 '+'를 기준으로 학점을 구해볼 겁니다.
앞에서 말했듯이 모든 학점 뒤에는 '+'가 붙지 않습니다.
그럼 어떻게 구할 것이냐?
문자열은 리스트와 같이 인덱스가 존재합니다.
현재 방문한 인덱스의 값 뒤에(i+1) '+'가 존재하는지 안 하는지를 기준으로 구해보겠습니다.
s = input() # 입력 받은 문자열
arr = [] # 학점을 저장할 배열
for i in range(len(s)-1):
if s[i] == "+":
continue
방문한 인덱스의 원소가 '+'일 경우 무시하고 지나가줍니다.
if s[i+1] == "+":
arr.append(s[i]+"+")
else:
arr.append(s[i])
다음 인덱스의 값이 '+'일 경우에 값을 추가하고 '+'가 아닐 경우에는 인덱스의 값을 그대로 추가해주면 값이 올바르게 들어갑니다.
이제 학점을 분류해주었으니 점수를 구해보겠습니다.
딕셔너리를 이용해서 점수를 구해볼게요
grade = {'A+':4.5,'A':4.0,'B+':3.5,'B':3.0,'C+':2.5,'C':2.0,'D+':1.5,'D':1.0,'F':0.0}
answer = 0 # 총점
for a in arr:
answer += grade[a]
이렇게 반복문을 돌리게 되면 각 학점의 점수가 answer에 추가가 됩니다.
마지막으로 과목의 개수로 나누어주면 학점의 평균이 나오게 됩니다.
import sys
input = sys.stdin.readline
if __name__ == "__main__":
grade = {'A+':4.5,'A':4.0,'B+':3.5,'B':3.0,'C+':2.5,'C':2.0,'D+':1.5,'D':1.0,'F':0.0}
s = input()
arr = []
for i in range(len(s)-1):
if s[i] == "+":
continue
if s[i+1] == "+":
arr.append(s[i]+"+")
else:
arr.append(s[i])
answer = 0
for a in arr:
answer += grade[a]
print(answer / len(arr))