관리 메뉴

Silver Library (Archived)

JS, for 문 - 10950 번, A+B - 3, .on method 본문

CS Library/JavaScript - Data Structure

JS, for 문 - 10950 번, A+B - 3, .on method

Chesed Kim 2021. 7. 20. 22:25
반응형

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.


예제 입력 1

5
1 1
2 3
3 4
9 8
5 2

예제 출력 1

2
5
7
17
7

요약:

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며,

각 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

각 테스트 케이스마다 A+B를 출력한다.


우선, readline 모듈을 적용 해보기로 했다.

 

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];

그리고 답.

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];

// .on method 가 몇 문제 연속으로 계속 쓰인다.
// 자세히 보면, readline 이 여러 줄 연속해서 쓰이고 있다. ex) rl.on, .on

rl.on('line', function (line) {
  input.push(line);

  /*
  예시)
  < 입력 >       < 입력을 받은 line 배열 >
    2	      [ '2', [ '3 4' ], [ '4 5' ] ]
    3 4
    4 5
  */
  
}).on('close', function () {
  let count = Number(input[0]);	// 테스트 케이스의 개수 <초기화>
  let numbers = []; // numbers 값을 기본값으로 초기화

  // 테스트 케이스 개수만큼, 각 케이스 배열 생성 후, numbers 배열에 할당
  // for 문 사용
  for (let i = 1; i <= count; i++) {
    numbers.push(input[i].split(' '));
  }
  /*
        < numbers 배열 >
  [ [ '3', '4' ], [ '4', '5' ] ]
  */

  /* 테스트 케이스 개수만큼 
  number 배열 안의, 각 케이스 배열 안 요소를 인덱스로 접근하여 합한다.*/
  for (let i = 0; i < count; i++) {
    num1 = Number(numbers[i][0]);
    num2 = Number(numbers[i][1]);

    console.log(num1 + num2);
  }
	
  process.exit();
});

on method

.on() method 는 다음과 같다.

"on method registers a handler, which is callback function with specific signature. Once an event is triggered, a handler is called. It receives necessary data as function parameters (commonly event object)." 

 

.on() method 사용 예시:

const emitter = {
  handlers: {},

  on(eventName, handler) {
    if (!this.handlers[eventName])
      this.handlers[eventName] = [];

    this.handlers[eventName].push(handler);
  },

  emit(eventName, data) {
    for (const handler of this.handlers[eventName])
      handler(data);
  }
};

emitter.on('foo', data => console.log(data.text));

emitter.emit('foo', { text: 'Foo event triggered' });

그래서...정확히 뭘까? .on method.

 

Is the 'on' method in this node.js code a JavaScript method or a node method?

I couldn't find this answer on Google because 'on' is such a common word. In this node.js example: conn.on('close', function() { var pos = connections.indexOf(conn); if (pos >= 0) {

stackoverflow.com

"It is a method from Node's EventEmitter class:"

https://nodejs.org/docs/latest/api/events.html#events_emitter_on_eventname_listener

결론: emitter.on(eventName, listener)

 

더 나가면 너무 커지니, 추가로 언급만 하고 일단 줄이겠습니다.

"Whenever it makes sense for code to SUBSCRIBE to something rather than get a callback from something. The typical use case would be that there's multiple blocks of code in your application that may need to do something when an event happens."

Event Emitter 는 언제 사용해야할까?

https://stackoverflow.com/questions/38881170/when-should-i-use-eventemitter

 

line 으로 입력 받는다?

이에 대해서는 명쾌해 보이는 설명이 있습니다. readline, fs module 이 다시 등장.

 

 

[백준/Node.js] Node.js 입력 받기

일반적으로 JS에서는 prompt로 입력을 받았으나, 백준에서는 런타임 오류가 발생한다.검색해보니 Node.js의 realine 모듈을 import해서 사용해야했다.소스 코드는 다음과 같다.console.log(answer);에 의해 입

velog.io

 

비고 사항.

여기서 부터 '비슷한 문제' 가 보이기 시작한다.

 

 

 

참조: https://velog.io/@exploit017/10950AB3

https://stackoverflow.com/questions/55064633/how-is-javascript-on-method-defined

https://www.tutorialsteacher.com/nodejs/nodejs-eventemitter