백준 코딩연습

[백준] 너의 평점은

작취 2023. 12. 4. 21:53
반응형

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