문제
https://school.programmers.co.kr/learn/courses/30/lessons/120823
문제 자체는 어렵지 않다. 다만 아래처럼 nodejs의 readline 모듈을 이용해 입출력을 받아야 해서 당황했는데, 차근차근 해석하면 로직을 어디에 작성해야 할 지 알 수 있다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log(Number(input[0]));
});
Readline 이해하기
1) readline이란
The node:readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time.
한번에 한 줄씩 stream으로부터 데이터를 읽을 수 있게 해주는 interface를 제공하는 모듈이다.
일단 readline 모듈을 불러온다.
const readline = require('readline');
2) readline.createInterface(options)
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
readline.Interface의 인스턴스를 생성한다. 파라미터로 option을 넘겨줄 수 있다.
이렇게 여러 개가 있는데 그 중 input과 output을 보자.
- input - 입력을 받을 stream. 여기서는 process.stdin으로부터 stream을 받기로 하였다.
- output - 마찬가지로 쓰기를 할 stream
3) rl.on으로 'line', 'close' 이벤트 수신
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log(Number(input[0]));
});
rl.on() 은 이벤트와 콜백함수를 인자로 받는다. 콜백함수는 그 이벤트가 실행되었을 때 수행할 작업이다.
- line 이벤트 - 한 줄을 입력받을 때 촉발된다.
- close 이벤트 부분 - 입력이 끝났을 때 촉발된다.
만약 '1 2 3'이라는 값을 입력받았다면 이것은 그냥 문자열에 불과하기 때문에 입력을 받은 순간 split(' ')을 통해 [1, 2, 3]으로 바꿔주고 있다. 그리고 입력이 끝나면 할 일을 rl.on('close', callback)의 콜백함수 부분에 작성해주면 된다.
위처럼 Promise와 같은 체인 형태로 쓸 수도 있고 아래처럼 따로 쓸 수도 있다.
rl.on('line', (line) => {
input = line.split(' ');
});
rl.on('close', (line) => {
console.log(Number(input[0]));
});
💻 풀이
그러니까 이 문제를 풀기 위해서는 close 부분에 로직을 작성하면 된다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
const n = Number(input[0]);
for(let i = 1; i <= n; i++) {
let str = '';
for(let k = 1; k <= i; k++) {
str += '*'
}
console.log(str);
}
});
💻 repeat으로 풀이 개선
repeat으로 안쪽 반복문 하나를 줄일 수 있었다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
const n = Number(input[0]);
let str = '';
for(let i = 1; i <= n; i++) {
console.log('*'.repeat(i));
}
});
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.0 | 공던지기 (0) | 2023.07.08 |
---|---|
프로그래머스 Lv.0 | 구슬을 나누는 경우의 수 (0) | 2023.07.07 |
프로그래머스 Lv.0 | 최빈값 구하기 (0) | 2023.07.05 |
프로그래머스 Lv.0 | 분수의 덧셈 (0) | 2023.07.02 |
프로그래머스 Lv.0 | 자릿수 더하기 (0) | 2023.06.30 |