[백준 25206번/node.js] 너의 평점은

김겜김·2024년 1월 29일
0

🎈문제


🎲입출력


출력값

[Running] node "c:\바탕 화면\백준알고리즘\SolveBaekjoon\test\6단계\n25206.js"
3.2844827586206895

[Done] exited with code=0 in 0.075 seconds

문제해결방법
맨처음에 입출력을 const fs = require('fs')로 받아와
fs 모듈로 풀어보려했지만 어디서 계속 오류가 나는지 NaN값이 출력이 계속되었고

const readline = require("readline");
try {
  const rl = readline.createInterface({
    input: fs.createReadStream("SolveBaekjoon/answer/level6/n25206.txt"),
    output: process.stdout,
    terminal: false,
  });

readline 방식으로 입출력을 해봤더니 오류없이 해결이 되었습니다.


readline모듈, fs모듈 차이점

readline 모듈:

목적: readline 모듈은 터미널이나 파일에서 데이터를 읽을 때 행 단위로 처리하기 위한 모듈입니다.
사용 예시: 대화형 프로그램이나 텍스트 파일에서 한 줄씩 데이터를 읽거나 처리할 때 주로 사용됩니다.
주요 함수: readline.createInterface(options): 인터페이스를 생성하는 함수.
rl.question(query, callback): 사용자에게 질문을 묻고, 사용자의 답변을 처리하는 함수.
rl.on('line', callback): 한 줄씩 데이터를 처리하는 이벤트 핸들러 함수.

fs 모듈

목적: fs 모듈은 파일 시스템과 상호 작용하기 위한 모듈로, 파일을 읽고 쓰거나 디렉토리를 조작하는 등의 기능을 제공합니다.
사용 예시: 파일의 내용을 읽어오거나, 파일에 쓰는 등의 파일 시스템 관련 작업에서 사용됩니다.
주요 함수:
fs.readFile(path, options, callback): 파일을 읽는 함수.
fs.writeFile(file, data, options, callback): 파일을 쓰는 함수.
fs.readdir(path, callback): 디렉토리 내의 파일 목록을 얻는 함수.
따라서, readline은 주로 입력 스트림에서 데이터를 행 단위로 처리할 때 사용되고, fs는 파일 시스템과 상호 작용할 때 사용됩니다. 두 모듈은 각각의 목적에 따라 사용되며, 서로 다른 유형의 작업에 특화되어 있습니다.


🗂️코드

const readline = require("readline");
const fs = require("fs");

try {
  //문제풀이용
//   const rl = readline.createInterface({
//     input: fs.createReadStream("SolveBaekjoon/answer/level6/n25206.txt"),
//     output: process.stdout,
//     terminal: false,
//   });

  //백준제출용
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false,
  });

  let sum = 0;
  let total = 0;

  const table = {
    "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,
  };

  rl.on("line", (line) => {
    const [sub, score, grade] = line.trim().split(" ");

    if (grade !== "P") {
      sum += Number(score) * table[grade];
      total += Number(score);
    }
  });

  rl.on("close", () => {
    if (total !== 0) {
      const result = sum / total;
      console.log(result);
    } else {
      console.log("총 학점이 0입니다.");
    }
  });
} catch (err) {
  console.log(err.message);
}
 
profile
개발에 관심이있습니다

0개의 댓글