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) 결과 비교
1, 2차 모두 정답이긴했다. 다만 시간은 동일하지만, 딕셔너리를 할당해서 그런지 2차 제출 코드가 메모리를 더 차지했다. 코드 길이는 거의 절반으로 줄어들긴했다.
1차 코드를 작성할 때, 중간중간 헷갈리기도 했고, 다시 검토할 때 조금 시간이 걸렸다. 그래서 한 눈에 알아보기에는 2차 제출 코드가 조금 더 나은 것 같다.
'🧩 Programming Languages > Python CodingTest' 카테고리의 다른 글
백준 단계별 풀기 - 시간복잡도 풀이 모음 (0) | 2023.12.08 |
---|---|
백준 2563번(silver 5) : 색종이 (0) | 2023.12.07 |
백준 10798번(bronze 1) : 세로읽기 (1) | 2023.12.07 |
백준 2738번(bronze 5) : 행렬 덧셈 (1) | 2023.12.06 |
백준 11718번(bronze 5) : 그대로 출력하기 (0) | 2023.12.04 |