반응형
https://www.acmicpc.net/problem/25206
25206번: 너의 평점은
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치
www.acmicpc.net
백준 코딩연습 너의 평점은 문제
입력이 공백으로 구분되어 지어지기 때문에 이번에도 split()을 사용해서 입력받아야 한다.
제한사항은 다음과 같으니까 코딩할 때 참고해서 하도록 하자
- 1 ≤ 과목명의 길이 ≤ 50
- 과목명은 알파벳 대소문자 또는 숫자로만 이루어져 있으며, 띄어쓰기 없이 주어진다. 입력으로 주어지는 모든 과목명은 서로 다르다.
- 학점은 1.0,2.0,3.0,4.0중 하나이다.
- 등급은 A+,A0,B+,B0,C+,C0,D+,D0,F,P중 하나이다.
- 적어도 한 과목은 등급이 P가 아님이 보장된다.
a = 0
subject = 20
sum_b = 0
list_chi = [list(map(str,input().split())) for _ in range(subject)] # 과목명, 학점, 등급 입력받기
for j in range(subject):
b = float(list_chi[j][1])
if list_chi[j][2] == 'A+':
a = a + (b*4.5)
sum_b = sum_b + b
elif list_chi[j][2] == 'A0':
a = a + (b*4.0)
sum_b = sum_b + b
elif list_chi[j][2] == 'B+':
a = a + (b*3.5)
sum_b = sum_b + b
elif list_chi[j][2] == 'B0':
a = a + (b*3.0)
sum_b = sum_b + b
elif list_chi[j][2] == 'C+':
a = a + (b*2.5)
sum_b = sum_b + b
elif list_chi[j][2] == 'C0':
a = a + (b*2.0)
sum_b = sum_b + b
elif list_chi[j][2] == 'D+':
a = a + (b*1.5)
sum_b = sum_b + b
elif list_chi[j][2] == 'D0':
a = a + (b*1.0)
sum_b = sum_b + b
elif list_chi[j][2] == 'F':
a = a + (b*0)
sum_b = sum_b + b
else:
continue
avg_score = a/sum_b
print("{:.6f}".format(avg_score))
ObjectOrientedProgramming1 3.0 A+
IntroductiontoComputerEngineering 3.0 A+
ObjectOrientedProgramming2 3.0 A0
CreativeComputerEngineeringDesign 3.0 A+
AssemblyLanguage 3.0 A+
InternetProgramming 3.0 B0
ApplicationProgramminginJava 3.0 A0
SystemProgramming 3.0 B0
OperatingSystem 3.0 B0
WirelessCommunicationsandNetworking 3.0 C+
LogicCircuits 3.0 B0
DataStructure 4.0 A+
MicroprocessorApplication 3.0 B+
EmbeddedSoftware 3.0 C0
ComputerSecurity 3.0 D+
Database 3.0 C+
Algorithm 3.0 B0
CapstoneDesigninCSE 3.0 B+
CompilerDesign 3.0 D0
ProblemSolving 4.0 P
3.284483
결과는 성공이지만 딕셔너리를 사용하면 코드 수를 줄일 수 있을것 같아서 딕셔너리로도 짜보자
name=[]
credit = []
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}
for i in range(20):
a,b,c = input().split()
b = float (b)
if c != "P":
grade.append(dic[c])
name.append(a)
credit.append(b)
else:
continue
sum1 = [ credit[i]*grade[i] for i in range(len(name))
]
average = sum(sum1)/sum(credit)
print("%.6f"%average)
딕셔너리를 사용하는게 if elif문을 사용하는것보다 코드가 간결해지고 처리속도도 빨라졌다.
다음부터는 딕셔너리를 애용해봐야겠다.
반응형
'백준 코딩연습' 카테고리의 다른 글
[백준] 블랙잭 (브루트포스 알고리즘) (0) | 2023.12.12 |
---|---|
[백준] 삼각형과 세 변 (0) | 2023.12.11 |
[백준] 색종이 (0) | 2023.12.09 |
[백준] 주사위 세개 (1) | 2023.12.06 |
[백준]오븐시계 문제 (0) | 2023.12.04 |