[node.js] 백준에서 node.js 출력하기

김형주·2021년 4월 14일
0

일반적으로 JS에서는 prompt로 입력을 받았으나, 백준 알고리즘에서는 런타임 오류가 발생합니다. 이를 해결하기 위해 Node.js의 모듈 중 2가지를 사용하는 방법에 대해 알아보겠습니다.

1. readline 모듈 사용


소스 코드1 (한 줄 입력)

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  console.log(line);
  rl.close();
}).on("close", function() {
  process.exit();
});

기본적으로 매개변수 line에 할당되는 것이 입력값이며, 문자열로 할당됩니다.
그리고 console.log(line);에 의해 입력 받은 값이 출력됩니다.

소스 코드2 (여러 줄 입력)

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
let input = [];
rl.on('line', function (line) {
  input.push(line)
})
  .on('close', function () {
  console.log(input);
  process.exit();
});

2. fs 모듈 사용


두 번째 방법으로는 fs모듈을 사용하는 방법이 있습니다. 백준에서도 예제 코드로 나와있는 것으로, readline으로 시간 초과가 나올 때 사용합니다. 저는 일반적으로 fs 모듈을 사용합니다.

소스 코드1 (한 줄 입력)

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');
let num = Number(input);
for (let i = 1; i <= num; i++) {
  console.log(i);
}

소스 코드2 (여러 줄 입력)

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let count = input[0];
let numbers = [];
for (let i = 1; i < input.length; i++) {
  if (input[i] !== '') {
    numbers.push(input[i].split(' '));
  }
}
for (let i = 0; i < numbers.length; i++){
  let num1 = Number(numbers[i][0]);
  let num2 = Number(numbers[i][1]);
  console.log(num1 + num2);
}

Comments
위 방법으로도 시간 초과로 문제가 해결되지 않는 경우가 있으니 참고해주시기 바랍니다.
앞으로 작성할 백준 예제의 소스 코드들은 위 소스를 포함한 전체 소스 코드를 올릴 예정입니다.
Node.js 로는 알고리즘 문제 풀기가 번거롭네요..

profile
만물에 관심이 많은 잡학지식사전이자, 새로운 도전을 꿈꾸는 주니어 개발자 / 잡학지식에서 벗어나서 전문성을 가진 엔지니어로 거듭나자!

0개의 댓글