본문 바로가기
Python/백준 문제 풀이

[BOJ] 25206번 너의 평점은 풀이

by 서원두 2022. 7. 15.

[BOJ] 25206번 너의 평점은 문제

20줄에 걸쳐서 입력이 들어오고, 우리는 이 입력에 대한 평점을 계산해야 한다.

[출처] https://www.youtube.com/watch?v=USmSzTyTJnI

사족으로, 본인은 공부를 대충 했기에 3.8/4.3이 학부 최종 평점이 되었다.

이 글을 보는 여러분들은 나처럼 게으르게 살지 말고 하루하루를 의미 있게 살았으면 한다.


각설하고, 이 20줄은 과목 / 학점 / 등급 순으로 들어오고, 이걸 반올림 없이 평점을 구하기만 하면 된다.

이런 문제와 같이 출력에 대한 제한이 없는 경우엔 f-string을 이용해서 출력을 할 필요는 없다. 주어진 오차 내로만 출력하면 된다.

import sys

if __name__ == '__main__':
	total_credit, total_score = 0, 0
	grade = {'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}
	for _ in range(20):
		_, now_credit, now_grade = sys.stdin.readline().rstrip().split()
		if now_grade != 'P':
			total_score += float(now_credit) * grade[now_grade]
			total_credit += float(now_credit)

	print(total_score/total_credit)

 

먼저 grade라는 딕셔너리(dictionary)를 만들어 각 학점에 대한 등급을 바로 얻어낼 수 있게 만든다.

딕셔너리는 해시(hash)라고도 불리는 데이터 자료형이며, 한 구역당 하나의 데이터만을 담당한다.

리스트를 안 쓰고 딕셔너리를 쓰는 이유는 매우 빠르고, 이것만이 가능한 경우가 존재하기 때문이다.

만약 시간 복잡도 빅 오(O)를 안다면, 리스트의 함수들은 O(n)이 대부분이지만 해시는 O(1)이 대부분이다.

속도면으로 워낙 강력하고 쓰임새가 리스트와 겹치지 않으므로 꼭 알아둬야 하는 개념이다.


20줄을 받는 동안 우리는 입력 중 과목명이 필요 없으므로 언더스코어(underscore, _) 을 이용하여 입력을 받지 않을 것이다.

이 언더스코어는 값을 무시하고 싶을 때 사용한다. 20번의 for문을 돌리는 부분에서 i가 들어가야 할 부분에 언더스코어를 쓴 것을 보면 이해하기 쉬울 것이다.

학점과 등급을 입력받고, 평점 계산을 위한 작업에 들어간다. 평점은 Σ(학점 × 등급) / Σ(학점) 이며, 등급이 P인 경우엔 평점 계산에서 제외한다. 이는 문제에도 설명이 되어있다.

등급이 P인 경우만 제외하고 평점을 계산하기 위해 if문을 이용한다. 이후 평점 계산법에 따라 계산을 해주면 끝난다.

만약 내가 모르는 계산 방법을 써야 하는 경우가 생기면 주저하지 말고 꼭 문제를 다시 보기 바란다. 문제는 다 알려준다.

728x90

댓글