👋🏻 JavaScript/📖 자바스크립트 ES6+

[JavaScript] 자바스크립트로 입력 받기

썸머몽 2023. 3. 25. 01:32
728x90

들어가기에 앞서

 

여태까지 백준에서 파이썬으로 알고리즘을 풀었어서 몰랐었는데, 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

 

728x90
댓글수0