[코딩테스트] JavaScript

[코테] 프로그래머스 : 코테 readline 모듈 JS 문제 푸는 방법

jini-dev 2025. 1. 6. 12:51
SMALL

프로그래머스에서 코딩 테스트를 풀려고 하는데

readline 모듈이라는 것을 보게 되었다

 

백준은 fs을 사용하여 문제 풀이를 해서 JS를 잘 몰랐던 나는

바로 프로그래머스 사이트로 넘어갔었는데 (이때 까지만해도 readline 모듈 안쓰는 문제만 있는줄 알았다..)

그러던 중 프로그래머스 0단계부터 풀려고 하다보니

???

readline 모듈 사용하는 문제가 있는 걸 보고 당황했다...

너가 왜 여기서 나와..!

 

나도 정확히 자세히 잘 아는건 아니지만😅

코테 처음 봐서 당황하실 분들을 위해 푸는 방법만 간단하게 작성해본다

쉽게 말해 console.log로 출력되도록 만들어주면 된다.

 

Readline 모듈

 

Node.js에서 입력 스트림(사용자 입력)과 출력 스트림(콘솔 출력 등)을 관리하기 위해 사용하는 모듈

 

Readline 모듈의 주요 이벤트 'line' & 'close'

 

line 이벤트

사용자가 한 줄을 입력하고 Enter 등을 누를 때 마다 발생하는 이벤트 이다.

line 이벤트 리스너 함수는 사용자가 입력한 문자열 한 줄을 포함하는 인자를 전달받는다.

close 이벤트

입력 스트림과 redaline interface가 완전히 닫혔을 때 발생하는 이벤트이다.

  • rl.close() 메소드를 호출해서 redaline 인터페이스가 명시적으로 닫혔을 때
  • input 스트림의 `end` 이벤트가 발생했을 때
  • 사용자가 Ctrl + D 를 입력했을 때
  • 사용자가 Ctrl + C를 입력했지만 SIGINT 이벤트 리스너가 등록되어 있지 않을 때

close 이벤트 리스너 함수는 전달되는 인자 없이 호출된다.

close 이벤트 발생 시 interface는 활성 상태가 아니게 되며, 입력 및 출력 스트림에 대한 제어를 포기한다.


 

문자열 출력하기 : 초기 코드
// readline 모듈 불러오기
const readline = require('readline'); 

// rl(readline 모듈에 interface 객체)를 생성하여 입출력을 처리 한다
const rl = readline.createInterface({ 
    input: process.stdin, // 입력 (standard input)
    output: process.stdout // 출력 (standard output)
});

let input = []; // input 변수를 배열의 형태로 선언한다.

// 'line' : 사용자의 입력(line)을 받을 때 발생하는 이벤트 처리
rl.on('line', function (line) { 
    input = [line]; // 입력받은 문자열 데이터를 input에 넣는다.

// 'close' : 사용자가 입력을 종료하거나 인터페이스가 종료될 때 발생하는 이벤트 처리
}).on('close',function(){
    str = input[0]; // str에 input[0]에 저장된 문자열을 넣는다.
});

쉽게 console.log 로 출력되도록 하면 된다고 했으니까

close 이벤트가 일어나는 부분에 console.log 코드를 넣어준다.

문자열 입력하기 풀이 1
.on('close',function(){
    str = input[0];
    console.log(str);
});

 

이렇게 하면 받은 입력 값(str에 저장된 값: input[0] )이 그대로 출력된다.

문자열 입력하기 풀이 2

line 이벤트에서 입력된 값이 console.log 로 바로 출력되도록 써도 출력된다.

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
}).on('line',(input)=>console.log(input))

다른 사람의 풀이로 보니까 더 줄여서 아래 처럼 쓰기도 하고.. 신기하다

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
}).on('line', console.log)

 

만약 line에 입력되는 값이 여러줄인경우

아래와 같이 split 과 같은 메소드를 사용해서 풀면 된다. 

rl.on('line', function (line) {
    input = line.split(' ')
}).on('close',function(){

 

좀 더 깊게 공부하고 싶으신 분들은

아래 Node.js  Readline 페이지 링크를 걸어두었으니 참고하시길

https://nodejs.org/api/readline.html

 

Readline | Node.js v23.5.0 Documentation

Readline# Source Code: lib/readline.js The node:readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time. To use the promise-based APIs: import * as readline from 'node:readline/promises';cons

nodejs.org

LIST