알고리즘

[BOJ] 25206번 - 너의 평점은(JS)

로돌씨 2024. 5. 19. 14:08

출처 - https://www.acmicpc.net/problem/25206

 

문제

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

치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.

전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.

인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.

P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.

과연 치훈이는 무사히 졸업할 수 있을까?

 

예제:

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

 

풀이

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(item=>item.split(' '));

//객체로 gradeTable에 등급과 점수를 저장함
gradeTable = {
    "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
}

sum = 0;
total = 0;
//for문을 이용해 input의 요소를 subject , score , grade로 할당해주고
for( let [subject , score , grade ] of input){
    //P는 과목에서 제외해야하기때문에
    if(grade === 'P'){
        continue;
    }
    //sum 에 학점과 치훈이의 등급을 곱한값을 더해주고
    sum+= Number(score) * gradeTable[grade]
    //학점을 다 더해준 값을 할당해주고
    total += Number(score)
    
}
//출력
console.log(sum/total)

 

객체에 key-value값을 이용해 key에 등급을 , value에 점수를 할당시켰다.

 

for(let [x,y,z]of arr ) => arr 의 요소를 x,y,z 로 할당시킴

gradeTable의 객체를 통해 grade와 같은 객체요소의 이름을 불러와 value값을 이용했고 다 더해준뒤 전체 학점을 나누어 주었다.