들어가기에 앞서
여태까지 백준에서 파이썬으로 알고리즘을 풀었어서 몰랐었는데, JS로 풀려니까 입력 값을 어떻게 받아야 할지 의문이었다.
구글링을 해보니 알 수 없는... 무시무시하게 긴 코드들이 나와 지레 겁을 먹고 좀 더 용이한 프로그래머스로 빤스런을 했으나 오늘 한 문제를 만나면서 다시 그 긴 코드들을 마주하게 되어 그냥 찬찬히 뜯어보기로 했다.
readline 모듈
내가 본 그 무시무시한 코드는 readline 모듈이었다.
이 모듈은 Readable Stream에서 한 번에 한 줄씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈이라고 한다.
먼저 이 모듈을 불러온다.
const readline = require("redaline");
다음으로 데이터를 읽기 위한 인터페이스를 생성해보자.
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
이제 입력을 받을 코드 / 입력값대로 실행할 코드를 만들어보자.
rl.on("line", (line)=>{
/*입력 받는 값을 처리하는 코드*/
rl.close();
});
rl.on("close", ()=>{
/*입력이 끝나고 실행할 코드*/
process.exit();
});
**입력**
1) rl.on() : 인터페이스가 가진 on() 매서드를 사용해 이벤트와 콜백 함수를 전달한다.
2) "line" : 입력값을 한 줄씩 읽어 '문자열'로 전달하는 역할을 하는 이벤트다.
3) rl.close() : 인터페이스를 종료해 무한히 입력 받는 것을 막는다. 이 이벤트가 호출되지 않으면 입력이 끝나지 않는다.
**출력**
1) "close" : 더 이상 입력되는 값이 없을 때 실행되는 이벤트다. 앞에서 rl.close()를 해줘야 하는 이유다.
2) process.exit() : 프로세스를 종료시킨다.
정리하자면...
내가 풀었던 문제를 예시로 정리해보자.
const readline = require('readline'); //모듈 불러오기
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
}); //인터페이스 생성
rl.on('line', function (line) {
input = line; //input 값을 line을 통해 문자열 타입으로 전달 받음
}).on('close', function () {
let inputNum = Number(input); //ex. 문자열 '3'을 정수 3으로 변경
for (let i = 1; i <= inputNum; i++) {
console.log('*'.repeat(i))
}
});
내가 푼 문제는 정수 n이 주어졌을 때 '*'을 사용해 높이와 너비가 n인 직각 이등변 삼각형을 출력하는 것이었다.
n = 3이라면 아래와 같은 모양이 리턴되어야 했다.
*
**
***
이렇게 푸는 문제인데 line은 input 값을 문자열로 받는다고 했다.
해당 부분을 정수로 바꿔준 후 일반적인 for문처럼 풀어주었다.
꽤 오래 머리를 싸맸던 문제였는데 알아보니 생각보다 빨리 이해할 수 있어 다행이었...
는데 한 줄에 여러 값을 입력 받는 경우 / 여러 줄로 여러 번 입력 받는 경우 등 여러 경우의 수가 또 있었다 ^_ㅠ
일단은 해당 알고리즘 풀이에 필요했던 기본적인 내용만 정리하고, 또 새로운 유형을 만나면 정리해보겠다.
**참고
[ node.js ] 자바스크립트 콘솔로 값 입력받기
js를 공부하면서 한번도 콘솔로 값을 받아서 사용하는 문제는 풀어지 못했는데 node.js 영역이여서 그랬나보다이 방법으로 백준에서 js 문제를 풀 수 있다고 하니 정리해보자: readline 모듈은 한 번
velog.io
NODE.JS 기반으로 알고리즘 풀때 입력받는 방법
서론 알고리즘 사이트는 여러가지가 있는데 프로그래머스 나 leetCode와 같은 사이트는 자동으로 입력을 처리해주고 함수내 알고리즘 코드만 작성하면 되는거라 입력받는 것에 대한 고민은 따로
yoon-dumbo.tistory.com
'👋🏻 JavaScript > 📖 자바스크립트 ES6+' 카테고리의 다른 글
[JavaScript] map() 이란? (0) | 2023.04.25 |
---|---|
[JavaScript] splice와 slice 비교하기 (0) | 2023.04.19 |
[JavaScript] 정규 표현식 공부하기 3 (0) | 2023.03.26 |
[JavaScript] 정규 표현식 공부하기 2 (0) | 2023.03.26 |
[JavaScript] 정규 표현식 공부하기 1 (0) | 2023.03.26 |