🧩 Programming Languages/Python CodingTest

백준 25206번(sliver 5) : 너의 평점은

복숭아아이스티에샷추가 2023. 12. 6. 15:00
 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

 

각 과목의 학점과 등급을 계산하여 전공평점을 구하는 문제이다.

 


 

 (1) 1차 구현 : 내가 작성한 코드  

chihoon = [list(input().split()) for _ in range(20)] 
score = [] # 학점x과목평점을 저장해둘 리스트 선언
isu = 0 # 총 이수한 학점을 구하기 위해 변수 선언

for i in range(20):
    credit = float(chihoon[i][1]) # 학점 
    grade = chihoon[i][2] # 등급
    if grade == 'P': 
        continue
    elif grade == 'A+':
        score.append(credit*4.5)
    elif grade == 'A0':
        score.append(credit*4.0)
    elif grade == 'B+':
        score.append(credit*3.5)
    elif grade == 'B0':
        score.append(credit*3.0)
    elif grade == 'C+':
        score.append(credit*2.5)
    elif grade == 'C0':
        score.append(credit*2.0)
    elif grade == 'D+':
        score.append(credit*1.5)
    elif grade == 'D0':
        score.append(credit*1.0)
    elif grade == 'F':
        score.append(0)
    isu += credit

print(sum(score) / isu)

 

먼저 과목명, 학점, 등급을 리스트로 입력받는다. 그 후 if문을 사용하여 학점x과목평점 을 계산하고 리스트에 추가한 후 평균을 구해 출력하도록 구현해보았다.

 

 

 (2) 2차 구현 : 다른 사람들이 작성한 코드 참고하여 다시 작성 

 

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}
score_sum = 0
isu = 0

for _ in range(20):
    sub, score, grade = input().split()
    if grade == "P":
        continue
    score_sum += float(score)*grade_dic[grade]
    isu += float(score)
print(score_sum/isu)

 

다른 사람들이 작성한 코드를 살펴보는데 대부분 등급과 학점을 리스트 혹은 딕셔너리로 구현한 후 for 문을 통해 좀 더 간략하게 작성한 것을 볼 수 있었다. 나는 그 중에서 딕셔너리를 이용하여 다시 구현해보았다.

 

 

 

 (3) 결과 비교 

 

위 : 2차 제출 코드 / 아래 : 1차 제출 코드

 

1, 2차 모두 정답이긴했다. 다만 시간은 동일하지만, 딕셔너리를 할당해서 그런지 2차 제출 코드가 메모리를 더 차지했다. 코드 길이는 거의 절반으로 줄어들긴했다.

 

1차 코드를 작성할 때, 중간중간 헷갈리기도 했고, 다시 검토할 때 조금 시간이 걸렸다. 그래서 한 눈에 알아보기에는 2차 제출 코드가 조금 더 나은 것 같다.