Node.js는 JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다.
Node.js 언어로 백준 문제를 풀 때 참고하기 위한 모듈예제를 모아보았다.
백준에서 node.js 언어로 입력을 받는 방법은 크게 두 가지가 있다.
- readline 모듈 사용
- fs 모듈 사용
readline 모듈 사용
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("line", function(line) {
console.log("hello !", line);
rl.close();
}).on("close", function() {
process.exit();
});
- 두 수를 공백으로 구분지어 입력받은 후 합을 구해 출력하는 코드(readline 모듈)
// 입력 : 1 2
// 출력 : 3
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ').map((el) => parseInt(el));
})
.on('close', function () {
////// 알고리즘 풀이 영역
console.log(input[0] + input[1]);
////// 알고리즘 풀이 영역
process.exit();
});
- 두 줄, 세 줄의 입력을 받아야 할 때 쓰는 코드 예시(readline 모듈)
// 입력 : 1
// 2
// 출력 : 3
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 () {
///////////////////////////////////
let count = Number(input[0]);
let numbers = [];
for (let i = 1; i <= count; i++) {
numbers.push(input[i].split(' '));
}
for (let i = 0; i < count; i++) {
num1 = Number(numbers[i][0]);
num2 = Number(numbers[i][1]);
console.log(num1 + num2);
}
///////////////////////////////////////
process.exit();
});
fs 모듈 사용
Python으로 백준 문제를 풀 때 시간 초과가 나는 것을 막기 위해 input() 대신 sys.stdin.readline()을 쓰는 것처럼
Node.js도 readline보다 fs모듈을 사용하는 것이 더 빠르다.
백준 언어 도움말에서 제공하는 코드
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split(' ');
var a = parseInt(input[0]);
var b = parseInt(input[1]);
console.log(a+b);
FileSystem의 약자인 fs 모듈은 파일 처리를 하는 모듈로, 직접 입력 파일을 읽어와서 처리한다.
위 코드는 입력값 전체를 하나의 문자열로 만들어 split 메서드로 배열로 만들어 그 안의 요소를 가져다 쓰는 방식으로 입력을 받는다.
하지만 백준에서 제공하는 위 코드를 사용했는데도 에러가 발생하는 경우가 잦다.
참고할 만한 코드
// 1. 하나의 값을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim();
// 2. 공백으로 구분된 한 줄의 값들을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ');
// 3. 여러 줄의 값들을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
// 4. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄에 공백으로 구분된 n개의 값들을 입력받을 때
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
// 5. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄부터 n개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
// 6. 하나의 값 또는 공백으로 구분된 여러 값들을 여러 줄에 걸쳐 뒤죽박죽 섞여서 입력받을 때
// ex) n 입력 - 공백으로 구분된 n개의 값 입력 - m 입력 - 여러 줄에 걸쳐 m개의 값 입력
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
const n = input[0];
const n_arr = input.slice(1, n+1);
const [m, ...m_arr] = input.slice(n+1);
// 2~6에서 입력받는 값들을 모두 String에서 Number로 바꾸려면 split()뒤에 .map(v => +v)를 추가
trim()을 쓰는 이유
-> 일부 입력값의 마지막에 개행문자가 포함된 경우가 종종 있다.
이런 경우 split("\n")할 경우 공백문자 하나를 더 갖는 배열을 반환한다. 이를 방지하기 위해서 trim()을 사용한다.
const text = '가\n나\n다\n';
console.log(text.split('\n')); // ['가', '나', '다', '']
console.log(text.trim().split('\n')); // ['가', '나', '다']
- Node.js 입력을 Python처럼 받는 fs모듈
// 입력창을 뜻하는 숫자들은 하나의 예시들
// 다르게 입력 들어가도 무관
const fs = require('fs');
const stdin = (process.platform === 'linux'
? fs.readFileSync('/dev/stdin').toString()
: `10 10 3
13 2 5 11 7 8 2 4 9 10
1
2
3
8
9
10
11
16
17
49
`
).split('\n');
출처:
Node.js로 백준(BOJ) 문제 풀 때 유의할 점들
백준에서 Node.js로 입력을 받는 방법은 크게 두 가지가 있다. 첫 번째는 readline 모듈을 사용하는 것이고, 두 번째는 fs 모듈을 사용하는 것이다. (이 글에서는 fs 모듈에 대해서만 다루겠다.) Python으
tesseractjh.tistory.com
Node.js 입력 받기 · 쾌락코딩
Node.js 입력 받기 26 Sep 2018 | node.js 프로그래머스같은 경우는 입력이 자동으로 되기 때문에 함수만 작성하면 된다. 그러나 구름ide 또는 백준 알고리즘 같은 경우 테스트 케이스 입력을 받기 위한
wooooooak.github.io
[BOJ] 백준에서 Node.js 입력을 Python처럼 쉽게 받는 법
요즘 들어 알고리즘 문제를 자바스크립트로 한두 문제씩 풀고 있습니다. BOJ를 자바스크립트로 시도해보셨다면 아시겠지만, 들어오는 입력을 모두 한 배열에 때려 박고 각각 인덱스로 접근해 사
degurii.tistory.com
node. js로 백준 코딩테스트 풀기 위한 모듈 모음
쾌락코딩 - Node.js 입력 받기 Node.js로 백준(BOJ) 문제 풀 때 유의할 점들 node. js언어로 백준 문제를 풀 때 참고하기 위한 모듈예제를 써본다. 두 수를 공백으로 구분지어 입력받은 후 합을 구해 출력
velog.io