문제설명
문자열 `str`이 주어질 때, `str`을 출력하는 코드를 작성해 보세요.
정답코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = [line];
}).on('close',function(){
str = input[0];
console.log(str)
});
해설
주어진 코드에 `console.log(str)`만 추가하면 되는 문제였다.
하지만 자바스크립트 코딩테스트 문제에 익숙하지 않았기 때문에 기본 제공되는 코드의 해석이 어려워 하나하나 정리하고 넘어가도록 하겠다.
1) const readline = require('readline');
NodeJS 문법이라고 한다.
`require` 메서드를 통해 외부 모듈을 가져온다고 한다.
The node:readline module provides an interface for reading data from a Readablestream (such as process.stdin) one line at a time.
NodeJS 도큐먼트에 나와있는 내용이다.
ReadableStream 스트림으로부터 한 번에 한 줄씩 데이터를 읽어오는 인터페이스를 제공하는 것 같다.
2) readline.createInterface
`readline` 모듈의 `createInterface`메서드를 사용해 새로운 객체를 만든다.
`input`으로 `process.stdin`을, `output`으로 `process.stdout`을 설정하여 표준 입력과 출력을 사용한다.
3) rl.on('line', function (line) {input = [line];});
`rl`인터페이스 객체에 `line`이벤트 리스너를 등록한다.
`line`이벤트는 사용자가 Enter키를 눌러 한 줄의 입력을 완료했을 때 발생한다.
이벤트가 발생하면 콜백 함수가 실행되고 `line` 매개변수로 입력된 문자열이 전달된다.
4) rl.on('close', function() {str = input[0]; console.log(str) });
`rl` 인터페이스 객체에 `close` 이벤트 리스너를 등록한다.
`close`이벤트는 입력 스트림이 종료될 때 발생한다.
`close`이벤트가 발생하면 콜백 함수가 실행되고 `input`배열의 첫 번째 요소를 `str`변수에 할당한다.
마지막으로 `console.log(str)`로 변수를 출력한다.
느낀점
코딩테스트 문제를 풀 때 가장 먼저 마주하게 되는 관문이라고 할 수 있는 입출력이다.
보통 처음에 문제 풀이를 시작하게 되면 문자열 출력이나, 사칙연산 같은 간단한 문제를 풀게 되는데, 정작 그 문제는 별 것 없지만 그 문제를 입출력하는데서 막히게 된다.
이럴 때는 재빠르게 검색해서 그냥 이런 게 있구나 정도만 보고 넘기는 게 좋을 것 같기는 하다.
사칙연산 단계에서 이걸 이해하려고 하면 어려울 것 같다는 생각이 든다.
나는 그냥 자바스크립트 문제가 낯설어서 공부하는 겸 정리해 보았다.