본문 바로가기

Algorithm

코딩테스트를 위한 Javascript 입출력

기본 입출력

// 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이 된다.