TIL

프로그래머스 코딩테스트 문제풀이 4일차 완료!

문자열을 배열(Array)로 변환하는 방법

  • 스프레드 연산자(Spread Operator)를 이용하여 문자열을 배열로 변환이 가능. 문자열을 구성하는 문자들이 분리되어 요소로 배열에 추가된다.
const str = "hello world";

const arr = [...str]

console.log(Array.isArray(arr))
console.log(arr);
true
[
  'h', 'e', 'l', 'l',
  'o', ' ', 'w', 'o',
  'r', 'l', 'd'
]
  • 문자열의 문자들을 분리하여 배열로 변환 : Array.from()
const str = 'ilikeapple'

const arr = Array.from(str);

console.log(arr);
[
  'i', 'l', 'i', 'k',
  'e', 'a', 'p', 'p',
  'l', 'e'
]
  • 구분자로 문자열을 분리하여 배열로 변환 : split()
const str = 'ilikeapple'

const arr = str.split('');

console.log(arr);
[
  'i', 'l', 'i', 'k',
  'e', 'a', 'p', 'p',
  'l', 'e'
]

배열을 문자열로 변환하는 방법

  • join() 함수 사용하기
const arr = ['tiger', 'likes', 'cereal'];


const str1 = arr.join();

const str2 = arr.join('-');

const str3 = arr.join('');


console.log(str1)
console.log(str2)
console.log(str3)
tiger,likes,cereal
tiger-likes-cereal
tigerlikescereal

readline

코딩 테스트 문제를 풀다가 갑자기 readline이라는 걸 사용한 문제가 나오길래 뭔가 싶어서 공식 문서를 들어가 봤더니

Readable 스트림에서 한번에 한줄씩 데이터를 읽기 위한 인터페이스를 제공한다.

라는 글과 함께 node:readline사용법이 적혀있었다.

import * as readline from 'node:readline/promises';
import { stdin as input, stdout as output } from 'node:process';

const rl = readline.createInterface({ input, output });

const answer = await rl.question('What do you think of Node.js? ');

console.log(`Thank you for your valuable feedback: ${answer}`);

rl.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(` `);
    rl.close();
 
}).on('close', function () {
  for (let i = 1; i <= input[0]; i++ )console.log('*'.repeat(i));
});

여기는 rl.on도 있고 createInterface내용도 살짝 다르다.

다른 블로그를 통해 알아본 결과

rl.on이 on()메서드를 호출해서 이벤트와 콜백함수를 전달하는데 여기서 사용된 이벤트가 lineclose라는 이벤트인 것이다.

line

'line'이벤트는 스트림 이 input라인 끝 입력( , 또는 )을 수신 \n할 \r때 마다 발생합니다
해당 이벤트는 스트림에서 새 데이터를 읽었고 해당 스트림이 최종 줄 끝 표시 없이 끝나는 경우에도 발생한다.
수신된 입력의 한줄을 포함하는 문자열로 호줄된다.

다시 말해서 사용자가 값을 입력하면 발생하는 것으로 생각하면 될것 같다.

close

해당 이벤트는 다음 나열한 상황중 하나가 발생하면 일어나는 이벤트이다.

  • rl.close()메소드를 호출되고 InterfaceConstructor인스턴스가 input및 output스트림 에 대한 제어를 포기했을때(...?)
  • input stream에서 end이벤트가 발생했을 때
  • input stream에서 사용자가ctrl+D를 눌러서 EOT를 발생시킬때 (end-of-trnasmission)
  • input stream에서 사용자가ctrl+C를 눌러서 SIGINT신호를 보냈을 때,

코딩테스트 문제는 직각삼각형 만들기라는 문제(https://school.programmers.co.kr/learn/courses/30/lessons/120823)
였는데 이제 다시 코드를 정리해보면

  • input이라는 빈 배열이 존재하고 사용자가 값을 입력하면 split을 통해서 input배열을 문자열로 만들고 close()메서드를 호출!

  • rl.on의 close 부분에서 사용자가 입력한 데이터를 통해 가공된 input을 가지고 명령을 수행하는 것이다. 내 경우에는 repeat()메서드를 사용한 *반복출력하기!

확실이 검색을해보고 다시 내용을 보니까 이해가 더 잘 되는 것 같다..... 아마도?

참고한 블로그 출처 : https://velog.io/@leenzy/readline-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

profile
개발자 꿈나무

0개의 댓글