이 글은 javascript로 알고리즘을 공부하는 많은 분들이 백준을 좀 더 편하게 사용했으면 좋겠으면하는 마음에 남기는 글이다.
서론따위 생략하겠다.
참고로 필자는 백준에서 추천하는 fs(파일 시스템)보다 readline을 선호한다.
(fs는 런타임 에러가 나는 문제가 종종 있다고 한다.)
1 2
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let data;
const main = (data) => {
// 함수 작성
}
const lineEvent = (line) => {
data = line
rl.close()
}
const closeEvent = () => {
console.log(main(data));
process.exit();
}
rl.on('line', lineEvent)
.on('close', closeEvent);
9
123456789
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let data;
const main = (data) => {
// 함수 작성
}
const lineEvent = (line) => {
line = line.trim();
if (Number.isNaN(Number(line))) {
data = line
rl.close()
}
}
const closeEvent = () => {
console.log(main(data));
process.exit();
}
rl.on('line', lineEvent)
.on('close', closeEvent);
4
13 7 5
7 13 6
14 3 12
15 6 16
0
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const main = (data) => {
// 함수 작성
}
let input = [];
let temp_count = 0;
let temp_input = [];
const lineEvent = (line) => {
line = line.trim();
if (!Number.isNaN(Number(line))) {
if (line.length && Number(line) === 0) rl.close()
temp_count = Number(line)
temp_input = []
} else if (temp_count > 0) {
temp_count--
temp_input.push(line.split(' ').map((num) => Number(num)));
if (temp_count === 0) {
input.push(main(temp_input))
}
}
}
const closeEvent = () => {
input.forEach((data,index) => {
console.log(`${index + 1}. ${data}`)
})
process.exit();
}
rl.on('line', lineEvent)
.on('close', closeEvent);
위의 코드는 그냥 복붙해서 쓰면 된다.
다만 저게 왜 동작하는건지 궁금하다면 아래 글을 읽어보면 도움이 될듯 하다.
그냥 간단하게 소개하자면 입력을 한줄 단위로 받을 수 있는 모듈이다.
한줄 입력을 받았을 때 해당 이벤트가 실행된다.
rl.close()를 통해 수동적으로 실행할수도 있고, 입력이 모두 종료되었을 때 발생하는 이벤트다.
const readline = require('readline');
// readline instance 생성
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// main함수에 전달할 데이터 초기화
let data;
// 실제 실행할 함수
const main = (data) => {
// 함수 작성
}
// line 이벤트 핸들러
const lineEvent = (line) => {
// 입력을 받으면 파라미터에 string으로 들어오는데 이를 알맞게 조리해서 쓰면 된다.
}
// close 이벤트 핸들러
const closeEvent = () => {
// 아래처럼 프로세스가 종료되었을 때 조리한 데이터를 실행 함수에 전달해서 실행해주면 된다.
// 명시적으로 프로세스도 종료해줘야 한다.
// 사실 안해봐서 프로세스 종료가 필수인지는 모르겠다만 쨌든 정상동작하니 해줘라
console.log(main(data));
process.exit();
}
// 이벤트 핸들러 바인딩
rl.on('line', lineEvent)
.on('close', closeEvent);
혹시나 더 필요한 케이스가 있으면 남겨주세요.