안경잡이 구루루

백준 25206 (너의 평점은) [Python/ 파이썬] 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 25206 (너의 평점은) [Python/ 파이썬]

구루루(gururu) 2023. 8. 29. 08:33
반응형

https://www.acmicpc.net/problem/25206

 

25206번: 너의 평점은

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

www.acmicpc.net

 


나:

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}
average = 0
totall = 0

for i in range(20):
  lecture, credit, grade = input().split() 
  if grade =='P':
    continue
  else:
    average += float(credit)*score[grade]
    totall +=float(credit)
    
print(average/totall)

완성된 코드는 위와 같다.

 

(1)
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}
average = 0
totall = 0

과목평점을 점수로 바꾸기 위해 딕셔너리를 이용해 해당 등급에 따른 점수를 score 변수에 담았다.

average 와 totall 은 순서대로 학점 * 과목평점,  학점의 총합을 담기위해 만들었다.

 

(2)
for i in range(20):
  lecture, credit, grade = input().split() 
  if grade =='P':
    continue
  else:
    average += float(credit)*score[grade]
    totall +=float(credit)

입력은 총 20 줄로 고정되어 있기 때문에 for 반복문을 이용해 20번 입력받기로 했다.

입력은 공백을 기준으로 과목명, 학점, 등급을 순서대로 받았다.

이때 등급이 P인 과목은 계산해서 제외해야 하기 때문에 조건문 if를 이용해 P가 나오면 그 반복을 넘기는 continue 사용

P 외의 경우는 반복이 끝나 최종적으로 계산이 될 때까지 앞서 만들었던 변수에 더해줌.

 

(3)   
print(average/totall)

최종적으로 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값을 출력


다른사람:

출처 https://calkolab.tistory.com/entry/baekjoon-python-25206

rating = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0', 'F']
grade = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0]

total = 0	# 학점 총합을 담을 변수
result = 0	# (학점 * 과목평점) 총합을 담을 변수
for _ in range(20) :
    s, p, g = input().split()
    p = float(p)
    if g != 'P' :	# 등급이 P인 과목은 계산 안함
        total += p
        result += p * grade[rating.index(g)]

print('%.6f' % (result / total))

완성된 코드는 위와 같다.

위 코드에서 주목할 부분은 크게 두 부분으로 볼 수 있다.

 

if g != 'P' :	# 등급이 P인 과목은 계산 안함
        total += p
        result += p * grade[rating.index(g)]

(1) 등급이 P인 과목은 계산 자체를 안해 좀 더 빠르게 계산한 것

 

print('%.6f' % (result / total))

(2) 출력할 때 깔끔하게 문제의 출력처럼 소숫점 6자리 까지 표현한 부분이다.

이떄 문자를 출력시 % 를 이용해 표현함.

%서식문자 의미
%s 문자열
%d 정수 
%f 실수 

 

반응형