프로그래머스나 leetcode와 같이 함수의 반환 값을 확인하는 사이트와 다르게 출력 값을 확인해야할 때가 있다. 대표적으로 BOJ가 있다. 경우에 따라서 입출력 틀을 정리해 본다.

readline 사용

1. 입력 1개

line이벤트를 통해 하나의 입력을 받은 뒤 프로세스를 종료시킨다.

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', input => {
    // solve
    rl.close();
}).on('close', () => {
    process.exit();
});

2. 테스트 케이스가 주어질 때

테스트 케이스를 담는 변수를 전역 변수로 지정하고 해당 횟수만큼 입력 받으면 프로세스를 종료시킨다. 하지만 테스트 케이스마다 입력 받아야할 개수가 문제마다 다를 수 있다.

let T, cnt = 0;
const inputs = [];
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', input => {
    inputs.push(input);
    if (cnt === 0) T = Number(inputs.shift());
    if (T === cnt) rl.close();
    // 혹은 rl.close() 대신
    // rl.write(null, { ctrl : true, name : 'd' }) 를 사용해도 된다.
    cnt++;
}).on('close', () => {
    // solve
    process.exit();
});

User snippets 에 추가한다.

"Algorithm": {
        "prefix": "algo",
        "body": [
        "let T, cnt = 0",
        "const inputs = []",
        "const readline = require('readline')",
        "const rl = readline.createInterface({",
        "\tinput: process.stdin,",
        "\toutput: process.stdout",
        "});",
        "rl.on('line', input => {",
        "\tinputs.push(input)",
        "\tif (cnt === 0) T = Number(inputs.shift());",
        "\tif (T === cnt) rl.close();",
        "\tcnt++",
        "}).on('close', () => {",
        "\t$0",
        "\tprocess.exit();",
        "});"
        ],
        "description": "Online Judge Snippet"
}

이제 algo 를 입력하면 바로 // solve 부분부터 작성할 수 있다.

3. 여러줄 입력

그냥 ctrl + D 를 누른다.