알고리즘 문제를 풀기위해 사용자로부터 값을 입력받는 방법을 알아보았다.
prompt를 이용하는 방법을 사용하지않고 자바스크립트의 내장 모듈 중 readline 모듈을 사용해서 문제를 해결하였다.
readline 모듈의 rl 객체는 event-driven 방식으로 동작한다.
- event-driven 방식: 이벤트에 반응하여 동작을 변경하는 방식(대화형 프로그램을 만드는 데 목적을 둠)
line: 한 줄이 입력되는 이벤트
close: EOF(End of File, 파일 끝, 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타냄) or close()함수를 호출했을 때 발생하는 이벤트
사용자로부터 한 글자만 입력받음
// 입력받은 매개변수 출력 function backToFront(num) { console.log(num); } // 한 개 입력: 띄어쓰기 없는 한 개의 입력 const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input; rl.on('line', function (line) { input = parseInt(line); // 한 줄을 입력받고 종료시킴 rl.close(); }).on('close', function () { // logic backToFront(input); // process 종료 process.exit(); });
사용자로부터 숫자 7일 입력받을 경우
사용자로부터 띄어쓰기를 포함한 한 줄을 입력받음
function backToFront(num) { console.log(num); } // 한 줄 입력: 띄어쓰기 포함 const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input; let arr = []; rl.on('line', (line) => { // line을 통해서 사용자가 입력한 문자열이 들어온다. input = line; rl.close(); }).on('close', () => { if (typeof input === Number) { // 입력된 문자열이 전부 정수일경우 형변환 arr.push(input.split(' ').map((el) => parseInt(el))); } // 한 줄에 입력된 값을 띄어쓰기 기준으로 arr 배열에 삽입 arr.push(input.split(' ').map((spell) => spell)); backToFront(arr[0]); process.exit(); });
사용자로부터 띄어쓰기를 기준으로 값 여러개를 입력받은 결과
function backToFront(num) { console.log(num); } // 여러 줄 입력 const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input = []; let arr = []; rl.on('line', (line) => { // 여러 줄 입력 input.push(line); // rl.close()가 없어서 계속 입력 (local에서 입력을 중지: ctrl + D) }).on('close', () => { // 입력 값 처리 let n = parseInt(input[0]); if (typeof input[1] === Number) { // 띄어쓰기 기준으로 배열에 넣기 let arr = input.map((el) => el.split(' ').map((el) => parseInt(el))); } let arr = input.map((el) => el.split(' ').map((el) => el)); backToFront(arr); process.exit(); });
사용자로부터
Enter
를 기준으로 여러 값을 입력받은 결과