백준 25206번 알고리즘 [node.js]
알고리즘
작성일 : 2024.02.27
문제
https://www.acmicpc.net/problem/25206
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치훈이의 전공평점을 계산해주는 프로그램을 작성해보자. 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다. 인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.
P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다. 과연 치훈이는 무사히 졸업할 수 있을까?
풀이
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
/* 예제 입력
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
*/
let input = [];
let aa = 0;
let GPA = {
"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: null,
};
rl.on("line", (line) => {
const a = line.split(" ");
// p인 과목은 계산에서 제외한다.
if (GPA[a[2]] != null) {
aa += +a[1]; // 학점을 더해준다
input.push(a[1] * GPA[a[2]]); // 과목의 학점과 과목평점을 곱해준다.
}
}).on("close", () => {
// 학점과 과목평점을 곱한 값을 전부 더해준다.
let sum = input.reduce((acc, cur) => {
return acc + cur;
});
// 학점 * 과목평점의 합을 학점의 총점으로 나눠준다.
console.log((sum / aa).toFixed(6));
});
여담
최근 알고리즘 공부를 개을리 했었는데 최근 문자열 유사도 검사와 같이 복잡한 로직을 구현할 때 어려움을 겪어 다시 1일1문제풀이를 하려한다.