기본 입출력
// Run by Node.js
const readline = require('readline');
function solution(data) {
console.log(data);
}
(async () => {
let rl = readline.createInterface({ input: process.stdin });
const data = [];
for await (const line of rl) {
data.push(line);
rl.close();
}
solution(data);
process.exit();
})();
코드의 동작과정은 다음과 같다.
1. for await...of 루프 안에서 rl이 사용자 입력을 읽어와 line에 할당한다.
2. data 배열에 line을 push한 후 rl.close로 readline interface를 종료한다.
3. solution 함수를 실행하고 process를 종료한다.
입력: Hello world!
출력: ['Hello world!']
테스트 케이스가 하나인 경우
// Run by Node.js
const readline = require('readline');
function solution(N, info, data) {
console.log(N, info, data);
console.log(data[info[0]][info[1]]);
}
(async () => {
let rl = readline.createInterface({ input: process.stdin });
let N = null;
let info = null;
let count = 0;
const data = [];
for await (const line of rl) {
if(!N) {
N = +line;
} else if (!info) {
info = line.split(" ").map(el => +el);
} else {
data.push(line);
count += 1;
}
if(count === N) {
rl.close();
}
}
solution(N, info, data);
process.exit();
})();
N은 입력 개수, info는 목표 좌표를 나타낸다.
다음과 같은 입력이 주어졌을 때
4
2 4
1 0 1 1
1 0 0 1
0 0 1 0
0 1 0 1
우선 N이 존재하지 않으므로 N에 4가 저장되고,
(string인 line을 + 연산자를 이용해 number로 변환 후 저장한다.)
info가 존재하지 않으므로 info에 [2,4]가 저장된다.
(마찬가지로 number의 배열이 된다.)
이후 data에 나머지 입력을 push하다가 count가 N이 되면 입력을 종료한다.
그리고 solution을 실행하고 프로세스를 종료한다.
출력:
4 [2, 4] [[1, 0, 1, 1], [1, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 1]]
0 // data[2][3]
테스트 케이스가 여러개인 경우
// Run by Node.js
const readline = require('readline');
function solution(T, N, info, data) {
console.log(T, N, info, data);
console.log(data[info[0]][info[1]]);
}
(async () => {
let rl = readline.createInterface({ input: process.stdin });
let T = null;
let N = null;
let info = null;
let countN = 0;
let countT = 0;
let data = [];
for await (const line of rl) {
if(!T) {
T = +line;
} else if(!N) {
N = +line;
} else if (!info) {
info = line.split(" ").map(el => +el);
} else {
data.push(line.split(" ").map(el => +el));
countN += 1;
}
if(countN === N) {
solution(T, N, info, data);
N = null;
info = null;
countN = 0;
data = [];
countT += 1;
}
if(countT === T) {
rl.close();
}
}
process.exit();
})();
N개의 입력을 저장하는 countN과 테스트 케이스의 개수 countT를 사용한다.
N개 만큼 line이 입력되면 push된 data를 solution에 넣어 실행한다.
그 후 N, info, countN, data를 초기화 한 후 countT를 1 증가시킨다.
countT가 T와 같아지면 rl과 프록세스를 종료한다.
입력:
2
2
1 1
1 1 0
0 1 0
3
2 0
1 1
1 0
0 0
출력:
2 2 [ 1, 1 ] [ [ 1, 1, 0 ], [ 0, 1, 0 ] ]
1
2 3 [ 2, 0 ] [ [ 1, 1 ], [ 1, 0 ], [ 0, 1 ] ]
0
입력 데이터의 타입에 따라 split과 map함수를 적절히 사용해야한다.
예를들어 문자를 +를 이용해 숫자로 변환하면 NaN이,
공백은 0이 된다.