문제 설명
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!
치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.
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 |
P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
과연 치훈이는 무사히 졸업할 수 있을까?
입출력
문제 풀이
const fs = require("fs");
let input = fs.readFileSync("./input.txt").toString().trim().split('\n');
let mypoint = 0
let mygrade = ''
let result = 0
let gradeToPoint = [4.5,4.0,3.5,3.0,2.5,2.0,1.5,1.0,0.0]
let grade = ['A+','A0','B+','B0','C+','C0','D+','D0','F']
let wholePoint = 0
for(let i = 0; i < input.length; i++){
let splited = input[i].split(' ')
mypoint = Number(splited[1])
mygrade = splited[2]
if(mygrade!=='P'){
result+=mypoint*(gradeToPoint[grade.indexOf(mygrade)])
wholePoint+= mypoint
}
}
console.log(result/wholePoint)
구해야 하는 것 : 전공평점 = 전공과목별 (학점 × 과목평점)의 합 / 학점의 총합
받은 점수 및 과목평점 = mypoint, mygrade
점수 및 과목평점 기준 = gradeToPoint, grade
ObjectOrientedProgramming1 3.0 A+ 과 같이
과목, 학점, 과목평점이 공백을 기준으로 구분되어 있다.
1. split하게 되면, 배열에 과목, 학점, 과목평점이 나뉘어 담긴다.
그래서 mypoint는 1번인덱스인 학점, mygrade는 2번인덱스인 과목평점을 담았다.
2. 학점*과목평점의 합 / 학점의 총합인데, 과목평점이 P일 경우는 제외해야 한다.
그래서 P가 아닐 경우에만 result에 각 학점*과목평점을 해주었다.
과목평점은 등급당 몇점인지 각 배열에 기준을 적어놓고,해당 mygrade등급이
gradeToPoint의 몇번 인덱스에 있는지 indexOf를 사용하여 어떤 점수인지 알 수 있다.
그리고 학점의 총합은 mypoint를 누적한 값으로 새 변수에 더해주어
계산하면 답을 구할 수 있다.
코멘트
다른 문제에 비해 푸는 시간이 오래걸리지 않았다.
문제에 쓰여있는 그대로의 조건을 충족했더니 바로 문제가 풀렸다.
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JavaScript] 폰켓몬 (0) | 2023.05.25 |
---|---|
[백준 | JavaScript] 2566 최댓값 (1) | 2023.05.24 |
[백준 | JavaScript] 4344 평균은 넘겠지 (0) | 2023.05.22 |
[백준 | JavaScript] 1157 단어 공부 (0) | 2023.05.22 |
[백준 | JavaScript] 10988 팰린드롬인지 확인하기 (1) | 2023.05.21 |